This is an automated email from the ASF dual-hosted git repository.

mercyblitz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new 87631aa  [Dubbo-5049]support annotation config id property to be a 
alias for a config bean. Fixes #5049 (#5063)
87631aa is described below

commit 87631aa992448e09cad350b9141afbae1cca09ef
Author: bailei <[email protected]>
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

Reply via email to