在使用dubbo框架进行服务开发的时候,如果在服务提供者类上加入@Transactional事务控制注解后,服务就发布不成功了。原因是事务控制的底层原理是为服务提供者类创建代理对象,而默认情况下Spring是基于JDK动态代理方式创建代理对象,而此代理对象的完整类名为com.sun.proxy.$Proxy42(最后两位数字不是固定的),导致 Dubbo在发布服务前进行包匹配时无法完成匹配,进而没有进行服务的发布。
解决方案
(1)修改服务提供者的spring的配置文件,开启事务控制注解支持时指定proxy-target-class 属性,值为true。其作用是使用cglib代理方式为Service类创建代理对象
(2)修改服务提供者中的实现类类,在@Service注解中加入interfaceClass属性,值为被实现的那个接口, 作用是指定服务的接口类型
经过这两步即可正常发布服务。