使用dubbo spring
boot发现,当引入xml配置时,由于xml的reference会在beanFactoryPostProcessor阶段解析生成ReferenceBean的BeanDefinition,随后当调用getBeanNamesForType方法时
DubboConfigBeanDefinitionConflictProcessor#resolveUniqueApplicationConfigBean)
会触发遍历所有的BeanNames,并执行isTypeMatch方法,在执行isTypeMatch方法时第一步会通过newInstance方式生成ReferenceBean(getSingletonFactoryBeanForTypeCheck方法),但是newInstance方式getObjectType会返回null,之后会触发ReferenceBean提前初始化(getTypeForFactoryBean方法).
当ReferenceBean初始化完成后执行afterPropertiesSet方法,在afterPropertiesSet又会提前初始化RegistryConfig等Bean(BeanFactoryUtils.beansOfTypeIncludingAncestors(applicationContext,RegistryConfig.class)),但是由于RegistryConfig等Bean是在BeanPostProcessor阶段(非BeanFactoryPostProcessor阶段)进行赋值以及参数宏替换,因此拿到的RegistryConfig要么为空(properties方式声明),要么占位符没有替换(xml方式声明),随后直接导致ReferenceBean初始化失败.
```java
Caused by: java.lang.IllegalStateException: No registry config found or it's
not a valid config! The registry config is: <dubbo:registry valid="false"
zookeeperProtocol="false" prefix="dubbo.registry" />
at
org.apache.dubbo.config.AbstractInterfaceConfig.checkRegistry(AbstractInterfaceConfig.java:202)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:378)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:329)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:250)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor$ReferenceBeanInvocationHandler.init(ReferenceAnnotationBeanPostProcessor.java:269)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor$ReferenceBeanInvocationHandler.access$100(ReferenceAnnotationBeanPostProcessor.java:242)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildInvocationHandler(ReferenceAnnotationBeanPostProcessor.java:236)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildProxy(ReferenceAnnotationBeanPostProcessor.java:219)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.doGetInjectedBean(ReferenceAnnotationBeanPostProcessor.java:134)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor.getInjectedObject(AnnotationInjectedBeanPostProcessor.java:360)
~[dubbo-2.7.3.jar:2.7.3]
at
org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor$AnnotatedFieldElement.inject(AnnotationInjectedBeanPostProcessor.java:540)
~[dubbo-2.7.3.jar:2.7.3]
at
org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116)
~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at
org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor.postProcessPropertyValues(AnnotationInjectedBeanPostProcessor.java:147)
~[dubbo-2.7.3.jar:2.7.3]
... 17 more
```
[ Full content available at:
https://github.com/apache/dubbo-spring-boot-project/issues/643 ]
This message was relayed via gitbox.apache.org for
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]