Java 使用AspectJ为超类方法添加功能

Java 使用AspectJ为超类方法添加功能,java,android,aop,aspectj,Java,Android,Aop,Aspectj,我写的Android应用程序,我想使用自定义字体。所以,我决定用它 要使用此库,我需要在每个活动中重写基本方法attachBaseContext: public class MainActivity extends AppCompatActivity { ... @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyConte

我写的Android应用程序,我想使用自定义字体。所以,我决定用它

要使用此库,我需要在每个
活动中重写基本方法
attachBaseContext

public class MainActivity extends AppCompatActivity {
...
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }
...
}
当然,我可以使用OOP实现这一点,但我想使用
AspectJ
实现这一点

在我使用的
gradle
项目中包含
AspectJ

以下是我的方面代码:

@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");
    }
}
因此,“方面成功完成”从不打印。请帮助我了解问题所在。

我在引用另一个问题:

在android上使用aspectJ时,您仅限于编译时编织,这基本上意味着您只能截取自己的代码


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

您是否在项目的.project文件中添加了ajdt支持?抱歉@Materazzi06,我不明白您的意思。我,我有一个
gradle
项目。我没有任何
*.poject
文件。好的,很抱歉。我在eclipse中使用AspectJ,即使对于私有和超类方法,一切似乎都很好。我不确定gradle项目。您可能需要调用连接点,而不是执行: