Aop原理
AOP(Aspect Oriented Programming,面向切面编程),是一种不同于OOP(Object Oriented Programming)的编程模式,不是OOP的替代,而是对OOP的一种补充。
-
假设项目中由多个业务都包含了一些相同的代码,这样的话,我们就可以使用OOP的思想,将这些“相同的代码”封装到一个方法method()之中,然后在不同的业务中调用改方法。
从AOP的角度来看,可以吧method看成一种横切逻辑,称为切面,即指贯穿在各个业务中。
使用AOP就不再在各个业务中显示的调用method方法,而是通过配置给各个业务标识一些切入点(Point),例如将add方法标识为一个切入点,当以后某个业务执行到改切入点时,就会根据通知(Advice)类型自动去执行method这个切面。
如果通知类型是前置通知,就会在每次执行add方法前先执行method()方法。这就好比给add()方法给增强了。
使用AOP的方式在完全不修改业务代码的前提下,给业务增加新功能,即实现了业务逻辑和横切逻辑的彻底解耦合。
AOP相关名词
- 切面(Aspect)
一个横切功能的模块化,这个功能可能会横切多个对象。例如:method()方法就是一个切面,它能够横切到多个业务中去。 - 切入点(Pointcut)
可以插入横切逻辑(如method())的方法。例如,调用add()就是一个切入点。 - 通知(Advice)
1.前置通知:在切入点add()方法执行之前,插入的通知。
2.后置通知:在切入点add()方法执行之后,插入的通知。
3.异常通知:在切入点add()方法抛出异常时,插入的通知。
4.最终通知:在切入点add()方法执行完毕时,插入的通知(不论是正常返回还是异常退出)。
5.环绕通知:可以贯穿切入点add()方法执行的整个过程。
两个核心概念
- 目标对象(Target Object)
被一个或多个切面所通知的对象,又被称为通知对象。 - 代理对象(Proxy Object)
AOP框架创建的对象,和目标对象遵循同样的接口,使用它的方式和使用目标对象的方式是一样的。不过,他是目标对象的增强版,通知中的代码执行时将会被代理对象的方法调用出发。