zoukankan      html  css  js  c++  java
  • Spring AOP

    1.AOP术语
    • 连接点(Joinpoint)
    程序执行的某个特定位置,如类开始初始化前,类初始化后。一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就称为“连接点”。
    • 切点(Pointcut)(org.springframework.aop_Pointcut)
    每个程序都有多个连接点,AOP通过“切点”定位特定的连接点,数据库中,连接点相当于数据库中的记录,而切点相当于查询条件。切点和连接点不是一对一的关系,一个切点可以匹配多个连接点 org.springframework.aop.Pointcut接口描述
    matches(class clazz) 其参数代表一个被检测类,该方法判别被检测的类是否匹配过滤条件
    is Runtime()返回false表示的是静态方法匹配器(仅对方法签名,包括方法名和入参类型及顺序,进行匹配,仅匹配一次),返回true表示的是动态方法匹配器(每次调用方法的入参都可能不一样,所以每次调用方法都必须判断,因此,动态匹配对性能影响很大,一般情况下,不建议使用)
     
    • 增强(Advice)
    增强是织入到目标类连接点上的一段程序代码。增强除了用于描述一段程序代码外,还拥有另一个和连接点相关的信息,这便是执行点的方位。Spring 所提供的增强接口都是带方位名的:BeforeAdvice,AfterRetunning ThrowAdvice
    五种类型:
    前置增强:org.springframework.aop.Beforeadvice,代表前置增强,因为Spring只支持方法级的增强,所以MethodBeforeAdvice是目前可用的前置增强,表示在方法执行之前实施增强,而BeforeAdvice是为了将来扩展版本需要而定义的
    后置增强:org.springframework.aop.AfterReturningAdvice代表后增强,表示在目标方法执行之后实施增强
    环绕增强:org.aopalliance.intercept.MethodInterceptor代表环绕增强,表示在目标方法执行前后实施增强
    异常抛出增强:org.springframework.aop.ThrowsAdvice代表抛出异常增强,表示在目标方法抛出异常后实施增强
    引介增强:org.springframework.aop.IntruductionInterceptor代表引介增强,表示在目标方法类中添加一些新的方法和属性
    org.springframework.aop.support.DelegatingIntroductionInterceptor(Spring扩展)
    在配置时首先必须指定引介增强所实现的接口,其次,由于智能通过为目标类创建子类的方式生成引介增强的代理,所以必须将ProxyTargetClass设置为true。如果我们没有对ControllablePerformanceMonitor进行线程安全的特殊处理,就必须将singleton属性设置为true让ProxyFactoryBean产生Prototype作用域类型的代理,这样就会产生一个严重的性能问题,由于CGLib动态创建代理的性能很低,二每次通过get Bean()从容器中获取作用域类型为prototype的Bean时都将返回一个新的代理实例,所以这种性能的影响时非常巨大的!这也是我们为什么要在代码中通过ThreadLocal对ControllablePerformanceMonitor的开关状态进行线程安全化处理的原因,通过香橙安全化处理之后,我们就可以使用默认的singletonBean作用域,这样创建代理的动作仅发生一次
    • 目标对象(Target)
    增强逻辑的织入目标类
    • 引介(Introduction)
     
    一种特殊的增强,为类添加一些属性和方法
     
    • 织入(Weaving)
    将增强添加到目标类具体连接点上的过程
    1)编译期织入,这要求使用特殊的编译器
    2)类装载期织入,这要求使用特殊的类装载器
    3)动态代理织入,在运行期为目标类添加增强生成子类的方式
    Spring使用动态代理织入,而AspectJ采用编译器织入和类装载期织入
    • 代理(Proxy)
    一个类被AOP织入增强后,就产出了一个结果类,他是融合了原类和增强逻辑的代理类。根据不同的代理方式,代理类及可能是和原类具相同接口的类,也有就是原类的子类,所以我们可以采用调用原类相同的方式调用代理类
    • 切面(Aspect)

  • 相关阅读:
    【BZOJ 4151 The Cave】
    【POJ 3080 Blue Jeans】
    【ZBH选讲·树变环】
    【ZBH选讲·拍照】
    【ZBH选讲·模数和】
    【CF Edu 28 C. Four Segments】
    【CF Edu 28 A. Curriculum Vitae】
    【CF Edu 28 B. Math Show】
    【CF Round 439 E. The Untended Antiquity】
    【CF Round 439 C. The Intriguing Obsession】
  • 原文地址:https://www.cnblogs.com/jiangxiulian/p/7988785.html
Copyright © 2011-2022 走看看