AOP:面向切面编程Aspect Oriented Programming

AOP:面向切面编程Aspect Oriented Programming
AOP的实现方案:
1、静态代理:
手动编写代码。
缺点:有代码侵入,耦合性强。
AspectJ 框架,自动编译代码到目标代码的位置。
2、动态代理
jdk 动态代理,必须有接口
cglib 动态代理:原理是通过继承来实现,要求目标必须是非final 类型
通常引入的依赖:String AOP ,将常用的aop操作进行精简,方法前插入代码,方法后插入代码,以及在方法前和后同时插入代码。
String AOP 是AOP 操作的一个子集,底层逻辑就是使用动态代理
AOP的使用场景是什么?
1、批量为某些方法切入前置操作、后置操作、比如是事务
实例操作:
1、在spring.xml 文件中配置,相对应的aop 文件
<!-- aop定义 --> <aop:config> <!-- 定义切入点,切点 --> <aop:pointcut expression="execution(* com.lgf.service.impl.*.*(..))" id="pc" /> <!-- 定义通知,即切入的代码,需要程序自行实现 --> <aop:advisor advice-ref="totalTimeAdvice" pointcut-ref="pc" /> </aop:config> <!-- 定义一个通知 --> <bean id="totalTimeAdvice" class="com.lgf.aop.TotalTimeAdivce" />
定义切入点,(* com.lgf.service.impl.*.*(..))
就是不管什么返回类型,在com.lgf.service.impl包下面的所有的类下面的方法,进行切入,定义的通知,在com.lgf.aop.TotalTimeAdivce 的类,进行实现,id就是进行相匹配的操作。
定义一个通知 就是 你要写的程序,spring aop 就是把你写的程序插入到你定义的切点位置
2、com.lgf.aop.TotalTimeAdivce 在这个类中写的一些程序就会插入到需要插入的位置
本文作者:刘广法,转载注明出处。