AspectJ 框架,比用 spring 实现 AOP 好用很多

2017-12-23  本文已影响0人  Java联盟

好的各位小伙伴

有对象的

抓紧去准备礼物

有表白对象的

抓紧去准备表白

剩下的准备好

我们来分享知识了

我们前面分享了 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的自动代理

测试类的话和上面一样,就是把加载的配置文件换一下。

好的今天的分享就到这里

怎么样我写明白了吗?

给大家分享一个框架

好开心!

再见了

拜拜

上一篇下一篇

猜你喜欢

热点阅读