AOP技术-01

1、Spring AOP

    AOP(Aspect Oriented Programming)称为面向切面(方面)编程;AOP主要用于处理共同逻辑,例如:日志记录,安全控制,事务管理,异常处理等,AOP可以将这些共通逻辑从普通业务逻辑代码中分离出来,在以后修改这些共通逻辑时就不会影响普通业务逻辑

    利用AOP可以针对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低,提高程序的可重用性,同时提高开发效率

    AOP与OOP区别:(不同领域的两种设计思想)

        OOP(面向对象编程)针对业务处理过程中实体的属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分

        AOP(面向切面编程)针对业务处理过程中的切面进行提取,它面对的处理过程中的某个步骤或阶段,以获得逻辑过程中各个部分之间低耦合的隔离效果

  注:AOP需要以OOP为前提和基础

    1)什么是切面

        切面:指封装共通逻辑的组件,此组件被作用到目标组件的方法上

    2)什么是目标

        目标:是被一个或多个切面所作用的对象

    3)什么是切入点

        切入点:是用于指定哪些目标组件的方法使用切面功能

在Spring中利用一个表达式指定切入点

    1)方法限定表达式

      execution(修饰符? 返回类型 方法名(参数? ) throws 异常类型? )

    2)类型限定表达式

      within(包名.类型)

    3)Bean名称限定表达式

      bean("Bean的ID或name属性值")

什么是通知

    通知是用于指定切面组件和目标组件作用的时机。例如:切面方法在目标方法之前或之后执行等时机。

Spring框架提供以下类型的通知:

前置通知:先执行切面功能再执行目标功能

后置通知:先执行目标功能再执行切面功能(目标无异常才执行切面功能)

最终通知:先执行目标功能再执行切面功能(目标有无异常都执行切面功能)

异常通知:先执行目标功能,抛出异常后执行切面功能

环绕通知:先执行切面的前置部分,然后执行目标(不能有异常),最后执行切面的后置部分

AOP实现原理

Spring AOP实现主要是急于动态代理技术,当Spring采用AOP配置后,Spring容器返回的目标对象实质上是Spring利用动态代理技术生成的一个代理类型,代理类重写了原目标组件方法的功能,在代理类中调用切面对象功能和目标对象的功能

Spring框架采用两种动态代理实现:

1)利用cglib工具包

     目标没有提供接口时采用此方法,代理类是利用继承方式生成一个目标子类

2)利用JDK Proxy API

    目标有提供接口时采用此方法,代理类采用实现目标接口方式生成一个目标子类

XML配置实现AOP

    开发步骤:

       1)创建一个类,充当切面组件,实现共通逻辑

       2)声明切面组件(在配置文件中)

<!--在配置文件中开启AOP注解扫描-->
<aop:aspectj-autoproxy/>

       3)使用切面组件,在配置文件中,将切面组件作用到目标组件方法上,设置通知类型以确认切面组件调用的时机

注解实现AOP

    开发步骤:

        1)创建切面组件

        2)声明切面组件

<!--
使用@Component注解标记(标识)这个类,将其声明为组件
使用@Aspect注解标记这个类,将其声明为切面组件
-->

        3)使用切面组件

            在切面组件的方法上,使用注解将切面组件作用到目标组件的方法上,并设置通知类型以确认切面组件作用的时机。

原文地址:https://www.cnblogs.com/xslzwm/p/9596154.html