AspectJ 框架,比用 spring 实现 AOP 好用很多
好的各位小伙伴
有对象的
抓紧去准备礼物
有表白对象的
抓紧去准备表白
剩下的准备好
我们来分享知识了
我们前面分享了 spring 实现 AOP 的方法,看着有那么一丢丢的麻烦,今天我们来了解一个实现方式简单,用起来更方便的框架叫做 AspectJ。
AspectJ 是什么
AspectJ 是一个面向切面的框架,他定义了 AOP 的一些语法,有一个专门的字节码生成器来生成遵守 java 规范的 class 文件。
AspectJ 的通知类型不仅包括我们之前了解过的四种通知:前置通知、后置通知、环绕通知和异常通知,而且还多出一种最终通知即无论程序是否正常执行,最终通知的代码会得到执行。
为什么说 AspectJ 更为简单,更加方便呢?
原因就是切入点表达式,切入点表达式可以标识切面织入到哪些类的那些方法当中,就不需要像我们之前利用 spring 实现 AOP 那样各种配置。只要把切面的实现配置好了,再把这个切入点表达式写好就可以了。
语法格式如下:
execution(
modifiers-pattern?
//访问权限匹配 如public、protected
ret-type-pattern
//返回值类型匹配
declaring-type-pattern?
//全限定性类名
name-pattern(param-pattern)
//方法名(参数名)
throws-pattern?
//抛出异常类型
)
注意:中间以空格隔开,有问号的属性表示可以省略。
特殊符号
a: * 代表0到多个任意字符
b: .. 放在方法参数中 ,代表任意个参数 ,放在包名后面表示当前包及其所有子包路径
c: + 放在类名后,表示当前类及其子类,放在接口后,表示当前接口及其实现类
例如:
a:execution(public * *(..))
表示任意的 public 方法
b:execution(* set *(..))
表示任意包含以 set 字符开头的方法
c:execution(* com.ln.spring.service.impl.*.*(..))
表示com.ln.spring.service.impl的任意类的任意方法
AspectJ+Spring的环境搭建
引入jar包
aopalliance-1.0.jar
spring-aop-4.2.1.RELEASE.jar
aspectjweaver-1.6.6.jar
spring-aspects-4.2.1.RELEASE.jar
引入aop的约束
xml配置方式
编写切面类,在切面类里面定义各种通知的实现方法。
在配置文件里面对 aop 进行配置
首先先注册我们的实现类和切面,之后进行 AspectJ的AOP的配置,进行一下测试
咱们就只测试一下前置通知哈,剩下的小伙伴们可以自己敲一下代码测试一下
基于注解方式
编写切面类,加上@Aspect注解,实现各种通知,在实现通知的方法上加上通知的注解以及切入点表达式的注解。
在配置文件注册切面,且加上aspectJ的自动代理
测试类的话和上面一样,就是把加载的配置文件换一下。
好的今天的分享就到这里
怎么样我写明白了吗?
给大家分享一个框架
好开心!
再见了
拜拜