我正在尝试在基于AndroidAnnotations的项目中使用ByteBuddy。
我有一个类MyService
,它是EBean
(AA),带有一些注入的依赖项:
@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集成在一起?
感谢您的帮助,谢谢。