You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by li...@apache.org on 2019/09/19 06:07:12 UTC
[dubbo] branch 2.7.4-release updated: [Dubbo-5049]support
annotation config id property to be a alias for a config bean. Fixes #5049
(#5063)
This is an automated email from the ASF dual-hosted git repository.
liujun pushed a commit to branch 2.7.4-release
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/2.7.4-release by this push:
new c90f571 [Dubbo-5049]support annotation config id property to be a alias for a config bean. Fixes #5049 (#5063)
c90f571 is described below
commit c90f57129c3bef0afd8e3150f7a74082d9996374
Author: bailei <ba...@163.com>
AuthorDate: Thu Sep 19 14:02:22 2019 +0800
[Dubbo-5049]support annotation config id property to be a alias for a config bean. Fixes #5049 (#5063)
LGTM
---
.../DubboConfigBindingBeanPostProcessor.java | 30 +++++++++++++++++++++-
.../DubboConfigBindingBeanPostProcessorTest.java | 16 ++++++++++++
2 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java
index 64327b7..9b181cb 100644
--- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java
+++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.config.spring.beans.factory.annotation;
import org.apache.dubbo.common.utils.Assert;
+import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.AbstractConfig;
import org.apache.dubbo.config.spring.context.annotation.DubboConfigBindingRegistrar;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfigBinding;
@@ -29,6 +30,10 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
@@ -49,7 +54,8 @@ import static org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncl
* @since 2.5.8
*/
-public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware, InitializingBean {
+public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware, InitializingBean
+ , BeanDefinitionRegistryPostProcessor {
private final Log log = LogFactory.getLog(getClass());
@@ -67,6 +73,8 @@ public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, A
private ApplicationContext applicationContext;
+ private BeanDefinitionRegistry beanDefinitionRegistry;
+
private boolean ignoreUnknownFields = true;
private boolean ignoreInvalidFields = true;
@@ -145,6 +153,15 @@ public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, A
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+ if (bean instanceof AbstractConfig) {
+ String id = ((AbstractConfig) bean).getId();
+ if (beanDefinitionRegistry != null && beanDefinitionRegistry instanceof DefaultListableBeanFactory) {
+ DefaultListableBeanFactory factory = (DefaultListableBeanFactory) beanDefinitionRegistry;
+ if (!StringUtils.isBlank(id) && !factory.hasAlias(beanName, id)) {
+ beanDefinitionRegistry.registerAlias(beanName, id);
+ }
+ }
+ }
return bean;
}
@@ -203,4 +220,15 @@ public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, A
return defaultDubboConfigBinder;
}
+ @Override
+ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
+ if (this.beanDefinitionRegistry == null) {
+ this.beanDefinitionRegistry = registry;
+ }
+ }
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
+ //do nothing here
+ }
}
diff --git a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java
index 62a9a26..301c1d9 100644
--- a/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java
+++ b/dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.config.spring.beans.factory.annotation;
import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.spring.context.config.NamePropertyDefaultValueDubboConfigBeanCustomizer;
import org.apache.dubbo.config.spring.context.properties.DefaultDubboConfigBinder;
@@ -52,6 +53,14 @@ public class DubboConfigBindingBeanPostProcessorTest {
return new ApplicationConfig();
}
+ @Bean("dubbo-demo-protocol")
+ public ProtocolConfig protocolConfig() {
+ ProtocolConfig protocolConfig = new ProtocolConfig();
+ protocolConfig.setName("dubbo");
+ protocolConfig.setId("customConfigAlias");
+ return protocolConfig;
+ }
+
@Bean
public DubboConfigBindingBeanPostProcessor bindingBeanPostProcessor() {
return new DubboConfigBindingBeanPostProcessor("dubbo.application", "dubbo-demo-application");
@@ -65,8 +74,15 @@ public class DubboConfigBindingBeanPostProcessorTest {
ApplicationConfig applicationConfig = applicationContext.getBean(ApplicationConfig.class);
+ String[] aliases = applicationContext.getAliases("dubbo-demo-protocol");
+ ProtocolConfig protocolConfigByName = applicationContext.getBean("dubbo-demo-protocol", ProtocolConfig.class);
+ ProtocolConfig protocolConfigById = applicationContext.getBean(protocolConfigByName.getId(), ProtocolConfig.class);
+
Assert.assertEquals("dubbo-demo-application", applicationConfig.getName());
Assert.assertEquals("mercyblitz", applicationConfig.getOwner());
Assert.assertEquals("Apache", applicationConfig.getOrganization());
+
+ Assert.assertArrayEquals(new String[]{"customConfigAlias"}, aliases);
+ Assert.assertEquals(protocolConfigByName, protocolConfigById);
}
}
\ No newline at end of file