Java 将ByteBuddy与Android注释一起使用
我正试图在基于AndroidAnnotations的项目中使用 我有一个类Java 将ByteBuddy与Android注释一起使用,java,android,android-annotations,byte-buddy,Java,Android,Android Annotations,Byte Buddy,我正试图在基于AndroidAnnotations的项目中使用 我有一个类MyService,它是一个EBean(AA),带有一些注入的依赖项: @EBean public class MyService { @Bean SomeRepository repo; @Log public void doSomething() { //do something that uses "repo" } } 我想在执行这个类的任何带有@log注释的方法之前记录一些东
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();
ClassByte Buddy可以重新定义类,而不是对它们进行子类化。如果您成功地钩住类加载,您可能能够做到这一点。据我所知,Android注释是在编译时创建的。最简单的方法是取消这些类的结尾。