Java 使用AspectJ为超类方法添加功能
我写的Android应用程序,我想使用自定义字体。所以,我决定用它 要使用此库,我需要在每个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
活动中重写基本方法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项目。您可能需要调用连接点,而不是执行: