美文网首页
AspectJ 框架,比用 spring 实现 AOP 好用很多

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

作者: Java联盟 | 来源:发表于2017-12-23 22:44 被阅读0次

    好的各位小伙伴

    有对象的

    抓紧去准备礼物

    有表白对象的

    抓紧去准备表白

    剩下的准备好

    我们来分享知识了

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

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

    好的今天的分享就到这里

    怎么样我写明白了吗?

    给大家分享一个框架

    好开心!

    再见了

    拜拜

    相关文章

      网友评论

          本文标题:AspectJ 框架,比用 spring 实现 AOP 好用很多

          本文链接:https://www.haomeiwen.com/subject/prqcgxtx.html