AOP是Aspect-Oriented Programing的简称,面向切面编程。
AOP可以说是在OOP上的基础上的扩展,在面向对象编程的过程中,可以很好的组织代码,通过继承关系实现代码复用,但是程序总是会出现一些重复代码(打印日志,安全信息等),而且不方便通过继承的方法将它们管理起来,他们功能重复并且需要用在不同的地方,这时候就需要使用AOP思想,将这些重复的代码抽取出来单独维护,在需要时统一调用。
AOP与原本的纵向继承机制不同,它采用的是横向抽取机制。
下面介绍一下AOP中常用的术语:
Joinpoint:连接点,指的是那些方法可以被拦截
Pointcut:切入点,指对哪些Joinpoint进行拦截
Advice:通知,定义在连接点处做什么,就是要增强的代码
Target:目标对象,被增强的对象
Proxy:代理对象
weaving:织入,指将增强应用到目标对象生成代理对象的过程
Aspect:切面,就是切入点和通知的结合,一个切面允许有多个切点和多个通知的组合。
Spring的AOP代理:
JDK动态代理:对有接口的类实现代理
CGLib:对类生成代理
在Spring中如果一个被代理的类实现了接口,则使用JDK动态代理,如果没有实现接口,则使用CGLib生成代理。