AOP--面向切片编程

2017-11-02  本文已影响155人  2f479b1467f1

一.关于定义接口类的问题

1.定义接口类
是为了在其他类中添加注解的时候,伪装成运行了此接口类方法
所以如果想要制定获取一些没有共性的方法或者参数去获取切面,运用此方法。
定义注解类,在方法前添加注解,然后可以在切面处找到切点。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CheckLogin {
}
/**
* 找到处理的切点
* * *(..) 可以处理CheckLogin这个类所有的方法
/
@Pointcut("execution(@com.shanlinjinrong.creditmoney_android.CheckLogin * (..))")
public void executionCheckLogin() {
}
2.不定义接口类
仅仅根据aspectJ语法,找到指定包下面的指定类以及指定方法
@Pointcut("execution(
com.androidaop.demo.AopDemoActivity.onCreate(..)) ||"
+"execution(
com.androidaop.demo.AopDemoActivity.onStart(..))")
public void logForActivity(){}; //注意,这个函数必须要有实现,否则Java编译器会报错

在execution方法中,第一个参数是指注解类方法,表示要切点的注解类方法
第二个参数是指添加注解类方法的位置

最终获取的切点是第二个参数中找到的类方法中的,含有第一个参数注解的方法。

注意在一种,切面的第一个参数是@com.shanlinjinrong.creditmoney_android.CheckLogin
这表明需要寻找的注解接口类是CheckLogin ,而第二个参数是* *(..)),说明不在乎哪里定义了注解接口

在第二种中,第一个参数是*,说明不在乎是哪一种注解接口(所以不需要定义注解接口),而第二个参数是com.androidaop.demo.AopDemoActivity.onCreate(..),说明切面是要寻找AopDemoActivity下的oncreate()方法,这样就不用添加注解,依然可以获取到AopDemoActivity的onCreate()方法的切点。

上一篇 下一篇

猜你喜欢

热点阅读