gpt4 book ai didi

java - 使用 AspectJ 为父类(super class)方法添加功能

转载 作者:行者123 更新时间:2023-11-29 20:18:19 26 4
gpt4 key购买 nike

我编写 Android 应用程序,我想使用自定义字体。所以,我决定使用 Calligraphy为此。

要使用这个库,我需要在每个 Activity 中覆盖基本方法 attachBaseContext:

public class MainActivity extends AppCompatActivity {
...
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
...
}

当然我可以为此使用 OOP,但我想使用 AspectJ 来完成。

为了在我的 gradle 项目中包含 AspectJ,我使用 gradle-android-aspectj-plugin .

这是我的方面的代码:

@Aspect
public class MyAspect {
@Before("execution(void com.youtubeplaylist.app.ui.activity.*+.attachBaseContext(context))")
public void beforeCalligraphy(ProceedingJoinPoint thisJoinPoint) throws Throwable {
Object[] args = thisJoinPoint.getArgs();
Context c = (Context) args[0];
c = CalligraphyContextWrapper.wrap(c);
args[0] = c;
thisJoinPoint.proceed(args);
System.out.println("Aspect finished successfully");
}
}

因此,“Aspect finished successfully” 永远不会打印出来。请帮助我了解问题所在。

最佳答案

我在引用 this answer关于另一个问题:

When using aspectJ with android you are limited to compile-time weaving, which basically means that you can only intercept code you own.

编译时编织只会改变您自己的 .class 的行为方式。如果您自己重写 attachBaseContext 方法并将其留空,您的方面将起作用。

关于java - 使用 AspectJ 为父类(super class)方法添加功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33545298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com