Environment
- Dubbo version: 2.6.6
- Operating System version: xxx
- Java version: xxx
Steps to reproduce this issue
- xxx
- xxx
- xxx
Pls. provide [GitHub address] to reproduce this issue.
Expected Result
我用单测实测自己项目内部提供的 dubbo service,
在单测类中使用 @Reference 注解引入服务接口.
启动时报错, 无法获取 provider
Actual Result
在 2.6.5 之前的代码里, 一个项目中的 @Service 和 @Reference 所生成的 bean, 名字都是以 ServiceBean: 开头, 那么在 ReferenceAnnotationBeanPostProcessor.buildInvocationHandler() 中
if (applicationContext.containsBean(referencedBeanName)) { // Is local @Service Bean or not ?
// ReferenceBeanInvocationHandler's initialization has to wait for current local @Service Bean has been exported.
localReferenceBeanInvocationHandlerCache.put(referencedBeanName, handler);
} else {
// Remote Reference Bean should initialize immediately
handler.init();
}
会进行判断, 如果是内部 service, 则 reference 会等待 service export 之后再 init.
而在 2.6.6 中, 上面代码失效了.
原因在于 2.6.6 使用了 AnnotationBeanNameBuilder 来给 service 和 reference 命名, 化分了不同前缀, 导致同一个项目里 reference 不能等待 service export 之后再去获取.
Environment
Steps to reproduce this issue
Pls. provide [GitHub address] to reproduce this issue.
Expected Result
我用单测实测自己项目内部提供的 dubbo service,
在单测类中使用
@Reference注解引入服务接口.启动时报错, 无法获取 provider
Actual Result
在 2.6.5 之前的代码里, 一个项目中的
@Service和@Reference所生成的 bean, 名字都是以ServiceBean:开头, 那么在ReferenceAnnotationBeanPostProcessor.buildInvocationHandler()中会进行判断, 如果是内部 service, 则 reference 会等待 service export 之后再 init.
而在 2.6.6 中, 上面代码失效了.
原因在于 2.6.6 使用了
AnnotationBeanNameBuilder来给 service 和 reference 命名, 化分了不同前缀, 导致同一个项目里 reference 不能等待 service export 之后再去获取.