2

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

我有一个具有一些注入依赖项MyService的(AA)类: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注入依赖项。如果我要子类化MyServicerepo将永远是null

问题是自动生成的类MyService_final,所以我不能子类化它。getInstance方法是静态的,构造函数是私有的,但我可以通过反射获得一个实例,所以这不是问题。

任何想法?有人将 ByteBuddy 与 AndroidAnnotations 集成了吗?

我会很感激任何帮助,谢谢。

4

0 回答 0