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