Android AOP,从需求到实战(AspectJ)

推荐链接:https://blog.youkuaiyun.com/Innost/article/details/49387395

1.前言

关于OOP和AOP的区别介绍,本文就不再详细阐述了,一种是面向对象编程,一种是面向切面编程。从编码思想上有些不太一样。下面我们直接从实战操作中来学习Android中的AOP

2.需求

2.1 需要给每个方法加上日志打印

我们先写一段代码 作为基础代码,我们在此之上 加上我们的需求

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
    super.onResume();
}
@Override
protected void onStart() {
    super.onStart();
}
@Override
protected void onPause() {
    super.onPause();
}
@Override
protected void onStop() {
    super.onStop();
}

}

现在我们的需求就是需要在这个类上(实际项目需求不止这一个类,几十几百个),每个方法加上日志打印,打印出每个方法的调用顺序,那么我们传统做法是怎么样呢? 大家想到的肯定就是在这一个类每个地方加上日志打印类似下面这样。

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
@Override
protected void onResume() {
    Log.d(TAG, "onResume: ");
    super.onResume();
}
@Override
protected void onStart() {
    Log.d(TAG, "onStart: ");
    super.onStart();
}
@Override
protected void onPause() {
    Log.d(TAG, "onPause: ");
    super.onPause();
}
@Override
protected void onStop() {
    Log.d(TAG, "onStop: ");
    super.onStop();
}

}

当然这样也可以达到相同的目的,但是一个项目成百上千个方法,难道一个一个的这样去加吗?有没有更好的方式呢? 哈哈,这里就可以用aop的方式来解决拉,什么是AOP呢,它是怎么解决的呢,不要着急,接下来我们先不要想什么是AOP,OOP的,这些咱们都先不谈,我们先学习一个新东西。AspectJ

3.AspectJ快速入门

3.1 AspectJ介绍,

来自百度百科:

AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

AspectJ官网地址: https://www.eclipse.org/aspectj/

这里我也就不讲一些你们不愿意看,我也不愿意看的一些东西了,东西太多了,只有慢慢看才能理解,既然是快速入门,我们就直接来点干货,

在这里插入图片描述

but,但是,在干之前建议大家还是要多看看开头推荐的那篇文章。其中有很多基础知识讲得挺好的。这里我也在重复讲一遍,也加深下自己的记忆。
首先我们要知道几个关键的知识点,我们会用到的。

1.Point
2.PointCut
3.Advice

3.2 Point

1.什么是Point呢?

答:Point,故名思意,就是一个点,AOP是面向切面编程, 也可以说是面向方法编程,那么这个点其实就是切入方法的点.

3.3 PointCut

1.什么是PointCut?

其实和Point差不多,这里的切入点就需要我们用AspectJ内部定义的关键字来声明不同的切入类型,比如是调用方法的时候,还是执行方法的时候,还是在静态方法执行的时候等等,接下来我们会讲到不要着急。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值