概念
AOP:面向切面编程,扩展功能不通过修改源代码实现。
AOP采用横向抽取机制取代了纵向继承体系重复性代码。
aop操作的相关术语
Spring中AOP的操作
在spring里面进行aop操作,使用aspectJ实现
aspectJ不是spring的一部分,和spring一起使用进行aop操作。
导入相关的jar包,出来导入spring基本的jar包之外还需要导入:
aopalliance.jar、aspectjweaver.jar、spring-aop.jar、 spring-aspects。jar
导入aop 约束
使用aspectJ实现aop的两种方式
(1)基于aspectJ的xml配置
使用表达式配置切入点
前置通知(方法之前执行):<aop:before method="" pointcut-ref="">
后置通知(方法之后执行):<aop:after-returning method="" pointcut-ref="">
环绕通知(方法前后都执行):<aop:around method="" pointcut-ref="">
如果用环绕方式,需要在增强的方法中加参数:方法名(ProceedingJoinPoint pro)
常用表达式:
(1)execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
例如:(1)execution(* cn.itcast.aop.Book.add(..))
*: 任意修饰符(public,private...)
cn.itcast.aop.Book.add(..): 路径
(2)execution(* cn.itcast.aop.Book.*(..))
Book类中的所有方法增强
(3)execution(* *.*(..))
所有类中的所有方法增强
(4)execution(* save*(..))
匹配所有save开头的方法做增强
步骤:例如有book类和mybook类,book类中有add方法,mybook中有before1方法,book是被增强类,mybook是增强类。
(1)配置类的对象(xml文件中配置,所以不多讲)
(2)配置aop操作(首先引入约束)
(3)测试:
(2)基于aspectJ的注解方式
案例:和上面需求一样
(1)导包和引入约束就不写了
(2)创建类
(3)配置xml文件
(4)测试