1. 方法切点函数
execution():根据匹配规则匹配
eg:前置增强@Before(execution(public * *Service(..)))
匹配所有以Service结尾的方法
@annotation():根据相应的的注解匹配
eg:后置增强@AfterReturning(“@annotation(com.sxd.annotation.Tag)”)
只有方法注解了@Tag才能匹配
2. 方法入参切点函数
args:根据输入参数类型参数匹配
eg:环绕增强@Around(com.sxd.domain.Student)
输入参数为Student才能匹配(包含子类)
@args:根据输入参数类型是否注解指定注解匹配
eg:抛出增强@AfterThrowing(com.sxd.annotation.Respository)
比如输入参数StudentDao类上注解了@Repository才能匹配(包含子类)
3. 目标类切点函数
within(): 根据匹配条件匹配
eg:Fianl增强@After(within(com.sxd.service.*Service))
service包下的以Service结尾类所有的方法才能匹配,与execution类似,但只精确到类级别
@within():根据输入参数注解类型匹配
eg:引介增强@DeclareParents(@within(com.sxd.annotation.Tag))
匹配标注了@Tag的类的子类和子孙类
target():根据类型匹配指定类来决定连接点是否匹配
eg:@Before(target(com.sxd.service.BaseService))
匹配BaseService的实现类StudentService的所有方法(接口方法以及没有在接口定义的方法)
@target():根据输入参数注解类型匹配
eg:@Before(@Target(com.sxd.annotation.Tag))
匹配只有标注了@Tag的类(不包含其子类)
4. 代理类切点函数
this()
判断代理对象的类是否按类型匹配于指定类,如果匹配,则代理对象的所有连接点匹配切点