• Spring面向切面编程


    一、AOP 的作用及其优势

    作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强
    优势:减少重复代码,提高开发效率,并且便于维护

    二、AOP 的底层实现

    实际上,AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态
    的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。

    三、AOP 的动态代理技术

    常用的动态代理技术
    1.JDK 代理 : 基于接口的动态代理技术
    2. cglib 代理:基于父类的动态代理技术

    四、基于 XML 的 AOP 开发

    1.导入坐标

    <!-- 导入 spring 的 context 坐标, context 依赖 aop-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.5.RELEASE</version>
    </dependency>
    <!-- aspectj 的织入 -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.13</version>
    </dependency>
    

    基础配置

    <!--定义切面-->
        <bean id="mySpect" class="com.finnlee.aop.MySpect" ></bean>
    
        <!--定义切入点-->
        <bean id="logs" class="com.finnlee.service.Logs"></bean>
    
        <aop:config proxy-target-class="true">
            <aop:aspect ref="mySpect">
                <aop:pointcut id="myPointcut" expression="execution(* com.finnlee.service.*.*(..))"/>
                <aop:before method="before" pointcut-ref="myPointcut" ></aop:before>
            </aop:aspect>
        </aop:config>
    

    五、XML 配置 AOP 详解

    表达式语法: execution([修饰符] 返回值类型 包名.类名.方法名(参数))

    访问修饰符可以省略
    返回值类型、包名、类名、方法名可以使用星号* 代表任意
    包名与类名之间一个点 . 代表当前包下的类,两个点 .. 表示当前包及其子包下的类
    参数列表可以使用两个点 .. 表示任意个数,任意类型的参数列表

    常用:execution(* com.finnlee.aop.*.*(..))

    六、通知类型

    前置通知 <aop:before> 用于配置前置通知。指定增强的方法在切入点方法之前执行
    后置通知 <aop:after-returning> 用于配置后置通知。指定增强的方法在切入点方法之后执行
    环绕通知 <aop:around>
    用于配置环绕通知。指定增强的方法在切入点方法之前和之后都
    执行
    异常抛出通知 <aop:throwing> 用于配置异常抛出通知。指定增强的方法在出现异常时执行
    最终通知 <aop:after> 用于配置最终通知。无论增强方式执行是否有异常都会执行

    配置文件中: @EnableAspectJAutoProxy(proxyTargetClass = true)
  • 相关阅读:
    12.12 怀北滑雪场滑雪记
    datetime类型offset-aware与offset-navie
    Django-models中的choise
    什么是__name__()
    单机Ubuntu安装第二个Mysql服务
    Ubuntu下的Python安装
    设置mysql允许外网访问
    Ubuntu初次设置root密码
    使用VMware+Ubuntu,无法切换大小写的异常处理
    XShell/Xftp 无法连接 Ubuntu20
  • 原文地址:https://www.cnblogs.com/finnlee/p/15987734.html
Copyright © 2020-2023  润新知