• Spring实战(十二) Spring中注入AspectJ切面


      1、Spring AOP与AspectJ

      Spring AOP与AspectJ相比,是一个功能比较弱的AOP解决方案。

      AspectJ提供了许多它不能支持的类型切点,如在创建对象时应用通知,构造器切点很方便。

      但是,不像某些其它面向对象语言中的构造器,Java构造器不同于其他的正常方法,这使得Spring基于代理的AOP无法把通知应用于对象的创建过程。

     

      2、通过Spring为AspectJ的切面注入依赖 

      对多数功能来讲,AspectJ与Spring是相互独立的。

      但是,精心设计切有意义的切面可能依赖其他类来完成工作。如在执行通知时,切面依赖与一个或者多个类。这时,我们可以借助Spring的依赖注入把bean装配进AspectJ切面中。

     

      通常情况下,Spring bean由Spring容器初始化,但是AspectJ切面是由AspectJ在运行时创建的,等到Spring有机会为切面A注入它的依赖B时,A已经被实例化了。(这里A是用AspectJ实现的一个切面,使用扩展的java语言)

      因为Spring不负责创建A,那就不能在Spring中简单地把A声明为一个bean。相反,我们需要一种方式为Spring获得已经由AspectJ创建的A的实例的句柄,从而注入B。

      考虑到这些,所有的AspectJ切面都提供了一个静态的aspectof()方法,这个方法返回切面的一个单例。

      所以为了获得切面的实例,我们必须使用factory-method来调用aspectof()方法,而不是调用A的构造器方法。(A中的setter方法)

    <bean class="xxx.xxx.xxx.A"  factory-method="aspectof">
        property name="B" ref="B"  />
    </bean>

      简而言之,Spring不能简单使用<bean>创建一个切面A的实例,而是通过aspectof()工厂方法获得AspectJ创建的切面的引用。

  • 相关阅读:
    CORS跨域漏洞学习
    CVE-2020-0796漏洞复现(RCE)
    Wfuzz使用学习
    DNSlog注入学习
    一些CTF练习记录
    数据结构与算法(十三):赫夫曼树
    数据结构与算法(十二):堆排序
    博客园自定义代码块样式
    Nginx入门(二):常用功能配置
    数据结构与算法(十一):二叉树
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/8375721.html
Copyright © 2020-2023  润新知