目录
一、AOP常用的术语
(1)切面:就是那些重复的,公共的,通用的功能称为切面。例如:日志,事务,权限。
(2)连接点:就是目标方法,因为在目标方法中要实现目标方法的功能和切面功能。
(3)切入点(Pointcut):指定切入的位置,多个连接点构成切入点,切入点可以是一个目标方法,可以是一个类中的所有方法,可以是某个包下的所有类中的方法。
(4)目标对象:操作谁,谁就是目标对象。
(5)通知(Advice):来指定切入的时机,是在目标方法执行前还是执行后还是出错时,还是环绕目标方法切入切面功能。
二、AspectJ对AOP的实现
对于AOP 这种编程思想,很多框架都进行了实现。Spring 就是其中之一,可以完成面向切面编程。然而,AspectJ 也实现了AOP 的功能,且其实现方式更为简捷,使用更为方便,而且还支持注解式开发。所以,Spring 又将AspectJ 的对于AOP 的实现也引入到了自己的框架中。在Spring 中使用AOP 开发时,一般使用AspectJ 的实现方式。
三、什么是 AspectJ?
AspectJ 是一个优秀面向切面的框架,它扩展了 Java 语言,提供了强大的切面实现。它因为是基于java语言开发的,所以无缝扩展。easy to learn and use(易学易用)。
官网地址:http://www.eclipse.org/aspectj/
四、AspectJ常见通知类型
AspectJ 中常用的通知有四种类型:
(1)前置通知@Before
(2)后置通知@AfterReturning
(3)环绕通知@Around
(4)最终通知@After
(5)定义切入点@Pointcut(了解)
五、AspectJ切入点表达式
规范公式:execution(访问权限 方法返回值 方法声明(参数) 异常类型)
简化公式:execution( 方法返回值 方法声明(参数) )用到的符号:
* ——> 代码任意个任意的字符(通配符)。
.. ——> 如果出现在方法的参数中,则代表任意参数,如果出现在路径中,则代表本路径及其所有的子路径。
示例:
execution(public * *(..)) :任意的公共方法
execution(* set*(..)):任何一个以“set”开始的方法
execution(* com.dhrj.service.impl.*.*(..)):任意的返回值类型,在com.dhrj.service.impl包下的任意类的任意方法的任意参数
execution(* com.dhrj.service..*.*(..)):任意的返回值类型 ,在com.dhrj.service及其子包下的任意类的任意方法的任意参数
execution(* *..service.*.*(..)):service之前可以有任意的子包
execution(* *.service.*.*(..)):service之前只有一个包
六、总结
仅自己学习记录,如有错误,敬请谅解~,谢谢~~~