Skip to content

Commit 87631aa

Browse files
sonymoonmercyblitz
authored andcommitted
[Dubbo-5049]support annotation config id property to be a alias for a config bean. Fixes apache#5049 (apache#5063)
LGTM
1 parent 46486bb commit 87631aa

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessor.java

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.apache.dubbo.config.spring.beans.factory.annotation;
1818

1919
import org.apache.dubbo.common.utils.Assert;
20+
import org.apache.dubbo.common.utils.StringUtils;
2021
import org.apache.dubbo.config.AbstractConfig;
2122
import org.apache.dubbo.config.spring.context.annotation.DubboConfigBindingRegistrar;
2223
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfigBinding;
@@ -29,6 +30,10 @@
2930
import org.springframework.beans.BeansException;
3031
import org.springframework.beans.factory.InitializingBean;
3132
import org.springframework.beans.factory.config.BeanPostProcessor;
33+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
34+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
35+
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
36+
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
3237
import org.springframework.context.ApplicationContext;
3338
import org.springframework.context.ApplicationContextAware;
3439
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
@@ -49,7 +54,8 @@
4954
* @since 2.5.8
5055
*/
5156

52-
public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware, InitializingBean {
57+
public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, ApplicationContextAware, InitializingBean
58+
, BeanDefinitionRegistryPostProcessor {
5359

5460
private final Log log = LogFactory.getLog(getClass());
5561

@@ -67,6 +73,8 @@ public class DubboConfigBindingBeanPostProcessor implements BeanPostProcessor, A
6773

6874
private ApplicationContext applicationContext;
6975

76+
private BeanDefinitionRegistry beanDefinitionRegistry;
77+
7078
private boolean ignoreUnknownFields = true;
7179

7280
private boolean ignoreInvalidFields = true;
@@ -145,6 +153,15 @@ public void setDubboConfigBinder(DubboConfigBinder dubboConfigBinder) {
145153

146154
@Override
147155
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
156+
if (bean instanceof AbstractConfig) {
157+
String id = ((AbstractConfig) bean).getId();
158+
if (beanDefinitionRegistry != null && beanDefinitionRegistry instanceof DefaultListableBeanFactory) {
159+
DefaultListableBeanFactory factory = (DefaultListableBeanFactory) beanDefinitionRegistry;
160+
if (!StringUtils.isBlank(id) && !factory.hasAlias(beanName, id)) {
161+
beanDefinitionRegistry.registerAlias(beanName, id);
162+
}
163+
}
164+
}
148165
return bean;
149166
}
150167

@@ -203,4 +220,15 @@ protected DubboConfigBinder createDubboConfigBinder(Environment environment) {
203220
return defaultDubboConfigBinder;
204221
}
205222

223+
@Override
224+
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
225+
if (this.beanDefinitionRegistry == null) {
226+
this.beanDefinitionRegistry = registry;
227+
}
228+
}
229+
230+
@Override
231+
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
232+
//do nothing here
233+
}
206234
}

dubbo-config/dubbo-config-spring/src/test/java/org/apache/dubbo/config/spring/beans/factory/annotation/DubboConfigBindingBeanPostProcessorTest.java

+16
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.apache.dubbo.config.spring.beans.factory.annotation;
1818

1919
import org.apache.dubbo.config.ApplicationConfig;
20+
import org.apache.dubbo.config.ProtocolConfig;
2021
import org.apache.dubbo.config.spring.context.config.NamePropertyDefaultValueDubboConfigBeanCustomizer;
2122
import org.apache.dubbo.config.spring.context.properties.DefaultDubboConfigBinder;
2223

@@ -52,6 +53,14 @@ public ApplicationConfig applicationConfig() {
5253
return new ApplicationConfig();
5354
}
5455

56+
@Bean("dubbo-demo-protocol")
57+
public ProtocolConfig protocolConfig() {
58+
ProtocolConfig protocolConfig = new ProtocolConfig();
59+
protocolConfig.setName("dubbo");
60+
protocolConfig.setId("customConfigAlias");
61+
return protocolConfig;
62+
}
63+
5564
@Bean
5665
public DubboConfigBindingBeanPostProcessor bindingBeanPostProcessor() {
5766
return new DubboConfigBindingBeanPostProcessor("dubbo.application", "dubbo-demo-application");
@@ -65,8 +74,15 @@ public void test() {
6574

6675
ApplicationConfig applicationConfig = applicationContext.getBean(ApplicationConfig.class);
6776

77+
String[] aliases = applicationContext.getAliases("dubbo-demo-protocol");
78+
ProtocolConfig protocolConfigByName = applicationContext.getBean("dubbo-demo-protocol", ProtocolConfig.class);
79+
ProtocolConfig protocolConfigById = applicationContext.getBean(protocolConfigByName.getId(), ProtocolConfig.class);
80+
6881
Assert.assertEquals("dubbo-demo-application", applicationConfig.getName());
6982
Assert.assertEquals("mercyblitz", applicationConfig.getOwner());
7083
Assert.assertEquals("Apache", applicationConfig.getOrganization());
84+
85+
Assert.assertArrayEquals(new String[]{"customConfigAlias"}, aliases);
86+
Assert.assertEquals(protocolConfigByName, protocolConfigById);
7187
}
7288
}

0 commit comments

Comments
 (0)