被事務代理的spring service 使用註解方式發佈Dubbo服務

 使用 @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

相關文章
相關標籤/搜索