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_
代わりにサブクラスが必要です。をサブクラス化すると、常に になります。MyService
Context
MyService
repo
null
問題は、自動生成されたクラスMyService_
がfinal
であるため、サブクラス化できないことです。getInstance
メソッドは静的で、コンストラクターはプライベートですが、リフレクションによってインスタンスを取得できたので問題ありません。
何か案が?ByteBuddy を AndroidAnnotations と統合した人はいますか?
助けていただければ幸いです、ありがとう。