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)使用切面组件
在切面组件的方法上,使用注解将切面组件作用到目标组件的方法上,并设置通知类型以确认切面组件作用的时机。