ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 切点表达式示例 ``` //任意返回值,任意名称,任意参数的公共方法 execution(public * *(..)) //匹配实现了DaoUser接口的所有子类的方法 within(com.zejian.dao.DaoUser+) bean:Spring AOP扩展的,AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法; //匹配名称中带有后缀Service的Bean。 @Pointcut("bean(*Service)") private void myPointcut1(){} this :用于匹配当前AOP代理对象类型的执行方法;请注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配 //匹配了任意实现了UserDao接口的代理对象的方法进行过滤 @Pointcut("this(com.zejian.spring.springAop.dao.UserDao)") private void myPointcut2(){} target :用于匹配当前目标对象类型的执行方法 //匹配了任意实现了UserDao接口的目标对象的方法进行过滤 @Pointcut("target(com.zejian.spring.springAop.dao.UserDao)") private void myPointcut3(){} @within:用于匹配所以持有指定注解类型内的方法;请注意与within是有区别的, within是用于匹配指定类型内的方法执行 //匹配使用了MarkerAnnotation注解的类(注意是类) @Pointcut("@within(com.zejian.spring.annotation.MarkerAnnotation)") private void myPointcut4(){} @annotation(com.zejian.spring.MarkerMethodAnnotation) : 根据所应用的注解进行方法过滤 //匹配使用了MarkerAnnotation注解的方法(注意是方法) @Pointcut("@annotation(com.zejian.spring.annotation.MarkerAnnotation)") private void myPointcut5(){} ``` 切点指示符可以使用运算符语法进行表达式的混编,如and、or、not(或者&&、\|\|、!) ``` //匹配了任意实现了UserDao接口的目标对象的方法并且该接口不在com.zejian.dao包及其子包下 @Pointcut("target(com.zejian.spring.springAop.dao.UserDao) !within(com.zejian.dao..*)") private void myPointcut6(){} //匹配了任意实现了UserDao接口的目标对象的方法并且该方法名称为addUser @Pointcut("target(com.zejian.spring.springAop.dao.UserDao)&&execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))") private void myPointcut7(){} ```