execution:用于匹配方法执行的连接点;
execution( com.test.method.des...*(..))
1, execution() 表达式的主体
2, 第一个“”符号 表示返回值的类型任意
3, com.test.method.des AOP所切的服务的包名,即,需要进行横切的业务类
4, 包名后面的“..” 表示当前包及子包
5, 第二个“” 表示类名,即所有类
6, .(..) 表示任何方法名,括号表示参数,两个点表示任何参数类型
execution(public (..)) 匹配所有的public修饰符的方法
within:用于匹配指定类型内的方法执行;
within(cn.java..*) . cn.java包及子包下的任何方法执行
within(java..IPointcutService+) . java包或所有子包下IPointcutService类型及子类型的任何方法
within(@cn..Secure *) 持有cn..Secure注解的任何类型的任何方法
this:用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配;
this(service.IPointcutService) 当前AOP对象实现了 IPointcutService接口的任何方法
this(service.IIntroductionService) 当前AOP对象实现了 IIntroductionService接口的任何方法也可能是引入接口
target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;
target(service.IPointcutService)当前目标对象(非AOP对象)实现了 IPointcutService接口的任何方法
target(service.IIntroductionService)当前目标对象(非AOP对象) 实现了IIntroductionService 接口的任何方法不可能是引入接口
args:用于匹配当前执行的方法传入的参数为指定类型的执行方法; (args属于动态切入点,这种切入点开销非常大,非特殊情况最好不要使用)
args (java.io.Serializable,..) 任何一个以接受“传入参数类型为 java.io.Serializable” 开头,且其后可跟任意个任意类型的参数的方法执行,args指定的参数类型是在运行时动态匹配的
@within:用于匹配所以持有指定注解类型内的方法;
@target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;
@args:用于匹配当前执行的方法传入的参数持有指定注解的执行;
@annotation:用于匹配当前执行方法持有指定注解的方法;