• 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)

  • 相关阅读:
    卡片悬停效果制作
    一个简单的登录页
    登录oracle ORA-12541: TNS:no listener报错
    Tomcat启动超时问题Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    获取input type=radio属性的value值
    Mybatic逆向工程的使用
    Mysql下载与安装
    JQuery操作input
    Java集合list,map,set区别及遍历
    List<Map<String, Object>>取值
  • 原文地址:https://www.cnblogs.com/jiangxiulian/p/7988785.html
Copyright © 2020-2023  润新知