android注解注入AspectJ面向切面AOP插桩技术,Java(1)

android注解注入AspectJ面向切面AOP插桩技术,Java(1)


通知注解

@Before => 切点之前执行代码
@After => 切点之后执行代码
@AfterReturning => 切点返回内容后执行代码,可以对切点的返回值进行封装
@AfterThrowing => 切点抛出异常后执行
@Around => 环绕,在切点前后执行代码

例如,一个Before:

@Pointcut("execution(* 你的包名.network..*(..))")
public void linkToServer() {

}

//使用@Before,在切点前执行
@Before("linkToServer()")
public void doBefore(JoinPoint joinPoint) {
   //开始处理链接服务器后的操作
}

切点匹配规则

+ 表示自身以及子类
* 表示任意类型
.. 表示任意长度类型

! 非  
&& 与 
|| 或

扫描二维码关注公众号,回复: 14865865 查看本文章

//所有AppCompatActivity类以及其子类testParams方法调用
@Pointcut("execution(public * testParams(..)) && target(androidx.appcompat.app.AppCompatActivity+) && args(args)")
public void activityTestParams(boolean args,AppCompatActivity activity) {
 
}

//MyLog注解在包com.my.aspectj开头的所有包下方法
@Pointcut("execution(@com.my.MyLog * com.my.aspectj..*(..))")
public void aspectLog(AppCompatActivity activity) {
 
}

target 切点所在的类的对象,只能是对象,不能是:target(androidx.appcompat.app.AppCompatActivity+)或target(androidx.appcompat.app.*),只能是target(activity)
with 指定类中的链接点,可包括包名或类名,例如:within(androidx.appcompat.app.AppCompatActivity+)或within(androidx.appcompat.app.*)

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/129559632