[apache/dubbo]关于dubbo @Service注解生成ServiceBean时, interface获取成spring 的代理对象的bug

2024-04-11 451 views
9

在项目里, 我使用了

@Service
@Transactional
@com.alibaba.dubbo.config.annotation.Service
public class SUserJpushServiceImp

的形式, 来暴露服务。但是在发布服务的时候, interface class 是通过 serviceConfig.setInterface(bean.getClass().getInterfaces()[0]); 的形式获取, 刚好, 我的service都使用了@Transactional注解, 对象被代理了。所以获取到的interface是Spring的代理接口...

找到一个解决方案: serviceConfig.setInterface(AopUtils.getTargetClass(bean).getClass().getInterfaces()[0]);

回答

4

duplicated by #394 #395 #557 mercyblitz 会在2.5.7版本修复此问题

5

然而,在2.5.7并没有修复这个问题吧。。。 我用的就是最新版本:2.5.7. 对一个类同时使用 spring的 @Service 和 dubbo的 @Service 注解,还是拿不到暴露的接口。。。。 请问什么时候能修复。。。

2

确认没有被修复,估计只是看这些问题长得像,没有深入理解这个是啥意思。

目前可以绕过,通过设置:@Service(interfaceName = "com.xxx.XXXService") 或者,@Service(interfaceClass = XXXServiceImpl.class)

6

@Gonzo-Tan @pinkdawn 请参照 @mercyblitz 同学所说,他已经在2.5.7版本对注解部分进行了重构,我怀疑你们还是使用的旧版本的AnnotationBean实现,请参照2.5.7注解使用文档

2.5.8版本即将发布,mercyblitz 又在2.5.7基础进行了完善和修复,2.5.8版本注解使用方式的调整烦请 @mercyblitz 完善后贴出文档链接

7

碰到同样问题,加上@DubboComponentScan后问题解决。

4

@Gonzo-Tan 为什么在同一个类上,要同时使用Spring的@Service和Dubbo的@Service呢?貌似使用了Dubbo的@Service注解,就可以从本地上下文中获取该类的bean了吧?