Spring学习(六)—— AOP

AOP基本概念和特点

什么是AOP

AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。

切面

很多不同的模块都要实现同一个功能,所以我们可以通过切面的方式,只要在某一处实现这个功能即可,默认的当运行任何一个子模块时,都会自动的通过预编译或运行期动态代理的方式去执行这个功能。

切面是和功能垂直的,业务功能是横向的,切面是横切于各个功能之上。

切面

AOP实现方式

  • 预编译 - AspectJ
  • 运行期动态代理(JDK动态代理、CGLib动态代理)-SpringAOP、JbossAOP

AOP的重要概念

(1)Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象。通常是一个类,里面可以定义切入点和通知,是对横切关注点的抽象。

(2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用,还可以是字段或则构造器。

(3)Advice(通知):AOP在特定的切入点上执行的动作,类型包含:

  • before
  • after
  • afterReturning
  • afterThrowing
  • around

(4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式

(5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类

(6)目标对象:被一个或多个切面所通知的对象

(7)Waving(织入):将切面应用到目标对象并导致代理对象创建的过程

(8)Introduction(引入):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

Spring框架中AOP的用途

  • 提供了声明式的企业服务,特别是EJB的替代法服务的声明
  • 允许用户定制自己的方面,已完成OOP和AOP的互补使用

Spring中的AOP实现

  • 纯java实现
  • 不是为了提供最完整的AOP实现,而是侧重于提供一种AOP实现和Spring IoC容器的整合
  • Spring AOP不会与AspectJ竞争,从而提供综合全面的AOP解决方案

有接口和无接口的Spring AOP实现的区别

  • Spring AOP默认使用标准的Java SE动态代理作为AOP代理,这使得任何接口(或接口集)都可以被代理
  • Spring AOP中也可以使用CGLIB代理(如果一个业务对象并没有实现任何一个接口)
您的支持将鼓励我继续创作~