AOP中关键性概念
连接点(Joinpoint)
程序执行过程中明确的点,如方法的调用,或者异常的抛出.
目标(Target)
被通知(被代理)的对象
通知(Advice)
在某个特定的连接点上执行的动作,同时Advice也是程序代码的具体实现,例如一个实现日志记录的代码(通知有些书上也称为处理)
代理(Proxy)
将通知应用到目标对象后创建的对象(代理=目标+通知),请注意:只有代理对象才有AOP功能,而AOP的代码是写在通知的方法里面的
切入点(Pointcut)
多个连接点的集合,定义了通知应该应用到那些连接点。
(也将Pointcut理解成一个条件 ,此条件决定了容器在什么情况下将通知和目标组合成代理返回给外部程序)
适配器(Advisor)
适配器=通知(Advice)+切入点(Pointcut) 连接点带条件的通知
通知接口
前置通知:在连接点之前执行的通知()
后置通知:在连接点正常完成后执行的通知
环绕通知:包围一个连接点的通知,最大特点是可以修改返回值,由于它在方法前后都加入了自己的逻辑代码,因此功能异常强大,它通过MethodInvocation.proceed()来调用目标方法(甚至可以不调用,这样目标方法就不会执行)
异常通知:出现异常执行系统提示,然后进行处理,价格异常为例
案例
工具类org.springframework.aop.framework.ProxyFactoryBean用来创建一个代理对象,在一般情况下它需要注入以下三个属性:
三个属性:
target:目标对象 (Object)
interceptorNames:需要应用到目标对象上的通知Bean的名字(List)【拦截器的名字|通知的名字】
proxyInterfaces:代理应该实现的接口列表(List)【需要被代理的接口名字,填写接口的完整类名】
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
default-autowire="byType"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.3.xsd">
<!--*********************************AOP***************