学习AOP,关键在于理解AOP的思想,能够使用AOP。对于AOP众多的概念,需要理解3个重要的概念是Pointcut、Advice和Advisor。
切入点(Pointcut)
在介绍Pointcut前,有必要先介绍一下Join Point(连接点)的概念。Join Point指的是程序运行中的某个阶段点,如某个方法调用、异常抛出等。Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合,指明Advice要在什么样的条件下才能被触发。
org.springframework.aop.Pointcut 接口用来指定通知到特定的类和方法,在接口Pointcut中,主要包含两个接口:ClassFilter和MethodMatcher。
说明:
接口ClassFilter,用来将切入点限定在给定的目标类中。
接口MethodMatcher,用来判断切入点是否匹配目标类给定的方法。
通知(Advice)
Advice是某个连接点所采用的处理逻辑,也就是向连接点注入的代码。
Advisor
Advisor是Pointcut和Advice的配置器,它包括Pointcut和Advice,是将Advice注入程序中Pointcut位置的代码。
上面只是粗略地对AOP的3个概念进行一下说明,目的是让读者能够较快地进入到AOP中。
先来看看这个spring的配置文件的配置:
点击(此处)折叠或打开
表示com.buty.service包下的所有方法为为事务管理。
execution(* com.buty.shtel.account.dao.impl.*.*(..))
这样写就可以了,这是com.buty.shtel.account.dao.impl 包下所有类的所有方法。
第一个 * 代表所有的返回值类型;
第二个 * 代表所有的类;
第三个 * 代表类所有方法,最后一个 .. 代表方法的所有参数。
下面给出一些常见切入点表达式的例子:
任意公共方法的执行:
execution(public * *(..))
任何一个以“set”开始的方法的执行:
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
定义在service包里的任意方法的执行:
execution(* com.xyz.service.*.*(..))
定义在service包或者子包里的任意类的任意方法的执行:
execution(* com.xyz.service..*.*(..))
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9399028/viewspace-1823332/ ,如需转载,请注明出处,否则将追究法律责任。