什么是AOP
-
OOP:Object Oriented Programming,面向对象编程
-
AOP:Aspect Oriented Programming,面向切面编程。是通过预编译方式(aspectj)或者运行期动态代理(Spring)实现程序功能的统一维护的技术。
-
AOP是OOP(面向对象编程)的技术延续,是软件开发中的一个热点,也是Spring中的一个重要内容。利用AOP可以实现对业务逻辑各个部分之间的隔离,从而使得业务逻辑各部分之间的耦合性降低,提高程序的可重用性,同时提高了开发效率。
AOP的作用
-
作用:不修改源码的情况下,进行功能增强,通过动态代理实现的
-
优势:减少重复代码,提高开发效率,方便维护
-
比如:给功能增加日志输出, 事务管理的功能
AOP的底层实现
实际上,Spring的AOP,底层是通过动态代理实现的。在运行期间,通过代理技术动态生成代理对象,代理对象方法执行时进行功能的增强介入,再去调用目标方法,从而完成功能增强。
-
常用的动态代理技术有:
-
JDK的动态代理:基于接口实现的
-
cglib的动态代理:基于子类实现的
-
-
Spring的AOP采用了哪种代理方式?
-
如果目标对象有接口,就采用JDK的动态代理技术
-
如果目标对象没有接口,就采用cglib技术
-
AOP相关概念
AOP相关概念
-
目标对象(Target):要代理的/要增强的目标对象。
-
代理对象(Proxy):目标对象被AOP织入增强后,就得到一个代理对象
-
连接点(JoinPoint):能够被拦截到的点,在Spring里指的是方法
目标类里,所有能够进行增强的方法,都是连接点
-
切入点(PointCut):要对哪些连接点进行拦截的定义
要增强的连接点,叫切入点
-
通知/增强(Advice):拦截到连接点之后要做的事情
对目标对象的方法,进行功能增强的代码
-
切面(Aspect):是切入点和通知的结合
-
织入(Weaving):把增强/通知 应用到 目标对象来创建代理对象的过程。Spring采用动态代理技术织入,而AspectJ采用编译期织入和装载期织入
Spring的AOP做的事情:
-
生成动态代理的过程(把通知织入到切入点的过程),是由Spring来实现的
-
Spring会监控切入点方法的执行,一旦发现切入点方法执行,使用代理机制动态创建目标对象的代理对象,根据通知类别,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行。