Java 将ByteBuddy与Android注释一起使用

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注释的方法之前记录一些东

我正试图在基于AndroidAnnotations的项目中使用

我有一个类
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注释是在编译时创建的。最简单的方法是取消这些类的结尾。