概述
使用 @com.alibaba.dubbo.config.annotation.Service 发布dubbo服务的时候,当服务类没有加入@Transactional的时候没有问题.
但是当加入事务后【@Transactional】, dubbo的 AnnotationBean 扫描 类执行下面的代码的时候就获取不到对应的注解,也就发布不了服务。
究其原因,是因为Dubbo提供的注解没有@Inherited元注解。
我们通过@Transactional标注过的Service产生一个代理类,这个代理类有两种生成方式。一种是jdk动态代理,一种是CGLib动态代理。
jdk动态代理生成的代理类与当前类共同实现相同的接口,所以与当前类也只是间接调用的关心,不在此次讨论范围。
CGLib生成的代理类为当前Service的子类,可以集成到当前Service的注解。
根据需求,我们需要更改Dubbo的源码
在Dubbo的Service注解上加上@Inherited,使这个注解变成可继承的。
然后再当前项目的spring的主配置文件中强制所有bean使用CGLib代理
这样服务即可正常发布。
最后
以上就是苗条夕阳为你收集整理的被事务代理的spring service 使用注解方式发布Dubbo服务的全部内容,希望文章能够帮你解决被事务代理的spring service 使用注解方式发布Dubbo服务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复