2

AndroidAnnotations ベースのプロジェクトでByteBuddyを使用しようとしています。

いくつかの依存関係が注入された (AA) であるクラスMyServiceがあります。EBean

@EBean
public class MyService {

    @Bean
    SomeRepository repo;

    @Log
    public void doSomething() { //do something that uses "repo" }

}

で注釈が付けられたこのクラスのメソッドを実行する前に、何かをログに記録したい@Log

MyServiceこの方法で新しいインスタンスを取得できます:

MyService service = MyService_.getInstance(context); //MyService_ is generated by AndroidAnnotations

すべての@Bean依存関係が注入されます。すべて大丈夫です。

ここで、ByteBuddy を使用して、動的サブクラスを作成し、アノテーション付きメソッドをインターセプトする必要があります。

  Class<? extends MyService> dynamic = byteBuddy
                .subclass(MyService_.class)
                .method(ElementMatchers.isAnnotatedWith(Log.class))
                .intercept(MethodDelegation.to(new LogInterceptor()))
                .make()
                .load(getClassLoader(), new AndroidClassLoadingStrategy(getDir()))
                .getLoaded();

を使用して依存関係を注入するため、MyService_代わりにサブクラスが必要です。をサブクラス化すると、常に になります。MyServiceContextMyServicereponull

問題は、自動生成されたクラスMyService_finalであるため、サブクラス化できないことです。getInstanceメソッドは静的で、コンストラクターはプライベートですが、リフレクションによってインスタンスを取得できたので問題ありません。

何か案が?ByteBuddy を AndroidAnnotations と統合した人はいますか?

助けていただければ幸いです、ありがとう。

4

0 に答える 0