AOP(Aspect Oriented Programing)面向切面编程,采取的是横向抽取机制,取代传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)。
例如:在纵向继承编程中,写有公有方法的父类需要被所有的子类继承并且调用,这种方法在使用中较为麻烦,而且代码耦合性强,所以在Spring中提出了面向切面编程,使用代理的方法切入类的方法中,对方法进行增强再重新返回包含增强方法的代理类,使得代码逻辑更加清晰,降低了代码的耦合性。
Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行通过代理方式向目标类注入增强型代码。
JoinPoint(连接点)
连接点指的是类中可以被拦截到的点,在Spring中,这些点指代的就是方法。例如,在业务处理中存在增、删、改、查四种方法,这四个方法就被称为连接点。
PointCut(切入点)
在一个类的众多方法中,需要被增强的那个方法(JoinPoint连接点)被称为切入点。例如,我们需要对删除方法进行增强,则删除方法就被称为切入点。
Advice(通知/增强)
当拦截到JoinPoint后,需要对该方法进行的增强处理称为通知。通知分为前置通知、后置通知、异常通知、最终通知、环绕通知(切面要完成的功能),简单来说就是该方法是在执行前还是执行后或者产生异常后再进行其他处理,例如,现在有一删除功能,我们希望在删除后记录该操作日志,就是一种对删除操作的后置通知。
Introduction(引介)
引介是一种特殊的通知,在不修改类的代码前提下,可以在运行期为类动态的添加一些方法和属性
Target(目标对象)
需要被代理的类,被称为目标对象
Proxy(代理)
一个类被AOP织入增强后,就产生一个结果代理类
Aspect(切面)
切入点和通知(引介)的结合就被称为切面