SpringBootはAOPを使用してdubboサービスを登録しない


に質問
SpringBootプロジェクトを構築していたところ、すでにDubboが統合されていてテストも問題なく、AOPを追加したところ、Dubboのproviderが登録されていないことがわかりました.説明すると、極めて簡単な原則に基づいて、Dubboのproviderはここで@Service注釈でサービスを公開し、xml構成を使用する方法はありません.このとき使用するspringbootとdubboのバージョンは:
SpringBoot  :1.5.1.RELEASE
io.dubbo.springbootb  1.0.0(Dubbo  :2.5.3)

原因調査
1.5.1.RELEASEバージョンのspringboot依存springバージョンは4.3.6.RELEASE、前は4.3.6.RELEASEバージョンのspringと2.5.3バージョンのdubbo結合でも問題ないでしょうが、それまでに構築されたプロジェクトとの唯一の違いは、以前はすべてxmlでdubboを構成していたことです.今回は注釈を使っていたので、xml構成でdubboを構成し、AOPを加えてサービスを正常にリリースできるので、問題は「dubboの@Service注釈とAOPの結合」にあるかもしれません.
ここでSpringのAOP(スタティックエージェントとダイナミックエージェント;Spring AOPの原理とその実現)を復習する
Spring AOPの原理は,スキャンされたクラスのためにエージェントクラスを動的に生成することである.(jdkで生成されたエージェントクラスは被エージェントクラスと共通してインタフェースを実現する;cglibで生成されたエージェントクラスは被エージェントクラスのサブクラスである)まずこの問題を解決する方法を記録し,次に時間を割いて原理を補う.//TODO:Spring AOP@Service付きdubboサービス生成エージェントクラスの原理分析
解決策
1、前述したように、xmlでdubboを構成すれば、サービスを正常にパブリッシュできるので、xmlでdubboサービスを直接構成してこの問題を解決することができます.
2、しかし、dubboの@Service注釈でサービスをリリースしたい場合は、dubboのバージョンをアップグレードする必要があります.AOPの下でサービスを発表するのに成功しなかったのはdubboの古いバージョンのバグで、2.6.*修復されました.しかしspringbootとdubboを結合する際にioが必要である.dubbo.Springbootの依存、io.dubbo.Springbootは現在1.0しかありません.0バージョンであり、このバージョンに依存するdubboは2.5である.3ですのでioを参照する必要があります.dubbo.Springbootの後dubboの参照を除外し、2.6.*を再参照します.バージョンのdubbo:

<dependency>
     <groupId>io.dubbo.springbootgroupId>
     <artifactId>spring-boot-starter-dubboartifactId>
     <version>1.0.0version>
     <exclusions>
         
         <exclusion>
         	<groupId>com.alibabagroupId>
               <artifactId>dubboartifactId>
         exclusion>
    exclusions>
dependency>

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>dubboartifactId>
    <version>2.6.2version>
dependency>

次に、@Service注記で、サービスプロバイダが実装するインタフェースのタイプを追加します.
@org.springframework.stereotype.Service("userService")
@com.alibaba.dubbo.config.annotation.Service(version = "1.0.0", interfaceClass = UserService.class)
public class UserServiceImpl implements UserService {
   //……
}

この時点でdubboサービスのリリースに成功し、AOPも正常に動作します.