• Spring AOP


    AOP  面向切面编程,在软件开发中某些行为对大多数应用是通用的,如性能监视,写日志,事物管理。这些行为嵌在业务逻辑代码中,在很多地方被重复使用。一般把这些行为称为横切关注点。如何把横切关注点从业务代码中分离出来,让业务代码只关注业务本身就是AOP要解决的问题。

    aop中的相关概念

    连接点(JoinPoint):某个方法的前面或后面,应用程序执行时能在连接点处插入一个切面。如:

    切面(aspect):横切关注点被摸块化为类后,这些类被称为切面,通知和切点的结合

    通知(Advice):又被称为增强,切面所要完成的工作,一段被织入目标连接点的程序代码。Spring中的五中通知:BeforeAdvice (前置通知),AfterReturningAdvice(后置通知) ,ThrowsAdvice(异常通知) , Around(环绕通知),Introduction(引介通知)

    切点(pointcut):通知所要织入的连接点的位置,一般用execution()表达式或正则表达式进行描述。

    目标对象(target):增强逻辑的织入目标类。

    织入(weaving):将切面应用到目标对象来创建新的代理对象的过程。

    代理对象(proxy):一个类被aop织入增强后,所得到的结果类。

    引介(introduction):某个类没有实现某个接口,通过引介可以为该类动态的添加该接口的实现逻辑

    Spring对AOP的支持 :1.基于代理的AOP     2.@AspectJ注解驱动的切面    3.纯POJO切面   4.注入式AspectJ切面(基于Schema)

    Spring aop的底层采用动态代理技术(基于jdk的动态代理和基于CGLib的动态代理)

    配置方法

    <bean id="playMagic" class="com.aop.PlayMagic"/>   --该bean 为目标对象bean
    <bean id="audience" class="com.aop.Audience"/>    --该bean为增强方法所在的bean
    <aop:config>
      <aop:aspect ref="audience"> --切面中引用增强
           <aop:before method="takeSeats" pointcut="execution(* com.aop.PlayMagic.play(..))"/>  --配置引用增强中的某个方法和切点表达式,切点表达式为
    </aop:aspect> 目标对象的某个方法
    </aop:config>

    采用AspectJ注解方式

    <aop:aspectj-autoproxy/>  --自动代理
    <bean id="playMagic" class="com.aop.PlayMagic"/>   --目标对象的bean
    <bean  class="com.aop.Audience"/>    --增强类bean 

    增强类

    package com.aop;
    
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    @Aspect
    public class Audience {
        @Before("execution(* com.aop.PlayMagic.play(..))")
        public void takeSeats(){
            System.out.println("The audience is taking their seats");
        }
    }

    还有很多配置的细节在用的时候查文档就行

  • 相关阅读:
    SpringCloudAlibaba
    wechat kill
    使用vscode调试 pomelo
    Terry的学习笔记ASP.NET MVC 4 HELLO WORLD 分析编辑页面添加搜索页面
    Terry的学习笔记ASP.NET MVC 4 HELLO WORLD添加视图(View)
    Terry的学习笔记ASP.NET MVC 4 简介
    正则表达式总结
    自己编写的 objectDataSource 配合 GridView 实现分页
    Terry的学习笔记ASP.NET MVC 4 HELLO WORLD 从控制器访问模型中的数据
    Terry的学习笔记ASP.NET MVC 4 HELLO WORLD添加控制器(Controller)
  • 原文地址:https://www.cnblogs.com/coderising/p/5827455.html
Copyright © 2020-2023  润新知