美文网首页
AOP-AspectJ实践

AOP-AspectJ实践

作者: 鲁班0号 | 来源:发表于2019-05-24 00:50 被阅读0次

0 引入包

根目录下的build.gradle中,dependencies添加以下两个依赖,很多网上文章说只需依赖第一个,运行时候会报错:

  classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.1.0'
  classpath 'org.aspectj:aspectjtools:1.8.14'

然后再主项目或者库的build.gradle中增加AspectJ的依赖:

compile 'org.aspectj:aspectjrt:1.8.14'

同时在build.gradle中加入AspectJX模块:

apply plugin: 'android-aspectjx'

1 定义切面类

TestAnnoAspect

@Aspect
public class TestAnnoAspect {
    private static final String TAG = "jack";

    @Before("execution(* com.jack.aop.MainActivity.onCreate(..))")
    public void onActivityMethodBefore(JoinPoint joinPoint) throws Throwable {
        String key = joinPoint.getSignature().toString();
        Log.d(TAG, "onActivityMethodBefore: " + key);
    }

    @After("execution(* android.app.Activity.onResume(..))")
    public void onActivityMethodafter(JoinPoint joinPoint) throws Throwable {
        String key = joinPoint.getSignature().toString();
        Log.d(TAG, "onActivityMethodafter: " + key);
    }
}

在类的最开始,我们使用@Aspect注解来定义这样一个AspectJ文件,编译器在编译的时候,就会自动去解析,并不需要主动去调用AspectJ类里面的代码。

MainActivity

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

经过编译后:MainActivity.class


public class MainActivity
  extends AppCompatActivity
{
  private static final JoinPoint.StaticPart ajc$tjp_0;
    private static final JoinPoint.StaticPart ajc$tjp_1;

    private static void ajc$preClinit()
    {
        Factory localFactory = new Factory("MainActivity.java", MainActivity.class);
        ajc$tjp_0 = localFactory.makeSJP("method-execution",
                localFactory.makeMethodSig("4", "onCreate", "com.jack.aop.MainActivity",
                        "android.os.Bundle", "savedInstanceState", "", "void"), 11);
        ajc$tjp_1 = localFactory.makeSJP("method-execution", 
                localFactory.makeMethodSig("4", "onResume", "com.jack.aop.MainActivity", 
                        "", "", "", "void"), 18);
    }

    protected void onCreate(Bundle savedInstanceState)
    {
        Bundle localBundle = savedInstanceState;
        JoinPoint localJoinPoint = Factory.makeJP(ajc$tjp_0, this, this, localBundle);
        TestAnnoAspect.aspectOf().onActivityMethodBefore(localJoinPoint);
        super.onCreate(savedInstanceState);
        setContentView(2131296283);
    }

    protected void onResume()
    {
        JoinPoint localJoinPoint = Factory.makeJP(ajc$tjp_1, this, this);
        try
        {
            super.onResume();
        }
        catch (Throwable localThrowable)
        {
            TestAnnoAspect.aspectOf().onActivityMethodafter(localJoinPoint);throw localThrowable;
        }
        TestAnnoAspect.aspectOf().onActivityMethodafter(localJoinPoint);
    }

    static {}
}

可以看到在onCreate和onResume中插入了代码。

完毕

相关文章

  • AOP-AspectJ实践

    0 引入包 根目录下的build.gradle中,dependencies添加以下两个依赖,很多网上文章说只需依赖...

  • AOP-AspectJ原理

    AspectJ实际上是对AOP编程思想的一个实践。AspectJ提供了一套全新的语法实现,完全兼容Java(其实跟...

  • AOP-AspectJ / JDK Proxy / CGLIB

    Spring AOP采用动态代理的方式,在运行期生成代理类来实现AOP,不修改原类的实现 Aspectj 使用编译...

  • AOP-AspectJ注解源码解析

    1.示例 配置文件: 输出结果: 2. AopNamespace...

  • AOP-AspectJ 实现防重复点击

    一、概念介绍 我们要实现项目中点击事件的防重复点击功能,AOP思想可以很好的实践。业务代码和其它代码可以完全解耦。...

  • AOP-AspectJ方式在通知中获取参数

    在通知类中方法的参数要与配置中的参数个数与类型对应起来 1 后置通知,是否出现异常都执行2 后置通知,只有...

  • Day37 流程

    一个原因/没有原因些许想法定下目标翻阅资料以史为鉴制定计划模拟演练实践实践实践实践实践实践……实践实践实践实践实践...

  • 实践实践实践

    发现自己就是想的太多,做的太少。9月份考察的一个项目,不管从哪个方面来讲,都觉得这个项目是非常好,值得一生去做的事...

  • 白玉花果的一般老化特征和老光特征,跟仿品比较

    实践出真知,但不正确的实践必不出真知。正确的实践是个人的实践和社会的实践相结合,脱离社会实践的个人实践是错误的实践...

  • 暑假工作 ‖ 社会实践报告

    实践时间:2018.07.09—2018.08.25实践人:欧阳广梅实践事件:1.社会实践(爱心传递)2.工作实践...

网友评论

      本文标题:AOP-AspectJ实践

      本文链接:https://www.haomeiwen.com/subject/lirmzqtx.html