AspectJ
AspectJ 是一个面向切面的框架,它扩展了 Java 语言(也是一种语言)
定义了 AOP 语法,有专门的便依赖用来生成遵守 Java 字节编码规范的 Class 文件
AspectJ 是一种编译期的用注解形式实现的 AOP
AOP/Spring AOP/AspectJ 的区别
AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点。
Aop的典型应用即spring的事务机制,日志记录。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑
各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。主要功能是:日志记录,性能统计,安全
控制,事务处理,异常处理等等;主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从
业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变
这些行为的时候不影响业务逻辑的代码。
AspectJ和Spring AOP 是AOP的两种实现方案,这一点要搞清楚。
AspectJ:Aspectj是aop的java实现方案,AspectJ是一种编译期的用注解形式实现的AOP。
Spring AOP
Spring aop是aop实现方案的一种,有两种实现方式,1是jdk动态代理,2是cglib动态代理。它支持在运
行期基于动态代理的方式将aspect织入目标代码中来实现aop。但是spring aop的切入点支持有限,而且
对于static方法和final方法都无法支持aop(因为支持aop。现在的spring整合了aspectj,在spring
体系中可以使用aspectj语法来实现aop。
1.xml 配置完成 AOP
创建通知类,添加需要的方法(1.前置 2.后置 3.环绕 4.后置 Returning 5.throwing)
在配置文件中添加通知类的 bean
添加<aop:config>
<aop:pointcut expression="execution(* com.xxx.dao.impl.*.*(..)) "
id="point"/>
<aop:aspect ref="advice">
<aop:before method="before" pointcut-ref="point"/>
<aop:around method="around" pointcut-ref="point"/>
<aop:after method="after" pointcut-ref="point"/>
<aop:after-returning method="returning" pointcut-ref="point"/>
<aop:after-throwing method="throwing" pointcut-ref="point"/>
</aop:aspect>
</aop:config>
2.注解配置完成 AOP
1.创建通知类
2.添加 @Aspect 设置通知类
3.创建切点方法
4.给通知方法加上相应的注解
@After @Before...