使用 @com.alibaba.dubbo.config.annotation.Service 發佈dubbo服務的時候,當服務類沒有加入@Transactional的時候沒有問題.spring
可是當加入事務後【@Transactional】, dubbo的 AnnotationBean 掃描 類執行下面的代碼的時候就獲取不到對應的註解,也就發佈不了服務。
spa
究其緣由,是由於Dubbo提供的註解沒有@Inherited元註解。代理
咱們經過@Transactional標註過的Service產生一個代理類,這個代理類有兩種生成方式。一種是jdk動態代理,一種是CGLib動態代理。繼承
jdk動態代理生成的代理類與當前類共同實現相同的接口,因此與當前類也只是間接調用的關心,不在這次討論範圍。接口
CGLib生成的代理類爲當前Service的子類,能夠集成到當前Service的註解。事務
根據需求,咱們須要更改Dubbo的源碼源碼
在Dubbo的Service註解上加上@Inherited,使這個註解變成可繼承的。it
而後再當前項目的spring的主配置文件中強制全部bean使用CGLib代理io
這樣服務便可正常發佈。jdk