AOP是Spring中重要核心之一.AOP也称切面编程.
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
举个简单的例子:方便理解
常规的
姓名 | 第一件要做的事 | 第二件要做的事 |
---|---|---|
张三 | 喝豆浆 | 打太极 |
李四 | 喝豆浆 | 跳跳绳 |
王五 | 喝豆浆 | 搬砖 |
那么这三个人统一的部分是什么? 喝豆浆.
我们将这个统一的行为提出来,将他封装成一个公共方法,谁掉谁喝.这样就不用给每个人写喝豆浆的方法了,我只需要调用”喝豆浆”的这个公共方法就行,但是还需要调用,我想更简单点,在Spring中有还有一个核心就是DI依赖注入,将”喝豆浆”方法注入到接口调用的某个地方(切点)自动注入.这个就切面编程
其涉及:
1.切面
一个关注点的模块化,这个关注点可能会横切多个对象,就像事务管理是J2EE应用中一个关于横切关注点的很好的例子.
2.连接点
(Joinpoint)在程序执行的过程中某个特定的点,在Spring AOP中,一个连接点相当于一个方法的执行.
3.通知
(Advice):在切面的某个特定的点上执行的动作,
{通知类型:
1.前置通知:在连接点之前执行的通知
2.后置通知:在连接点正常执行之后执行的通知
3.异常通知:在方法抛出异常退出时执行的通知
4.最终通知:当某连接点退出的时候执行的通知
5.环绕通知:保卫一个连接点的通知,如方法的调用
}
已连接器做通知模型,并维护一个连接点为中心的拦截器链.
4.Pointcut
(切入点):匹配连接点的断言,通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行.
5.引入:
用来给一类型声明额外的方法或属性.
6.目标对象
:被一个或多个切面执行通知的对象.
7.AOP代理,
:用AOP框架创建的对象,用来实现切面契约.
[AOP中,代理可以是JDK动态代理或者CGLIB代理]
8.织入:
将切面链接到其他应用程序类型或者对象上,并创建一个被通知的对象
切入点:条件,以类或者方法作为条件
任意公共方法的执行:
execution(public * * (..))
任何一个名字以”set”开始的方法的执行
execution(* set*(..))
AccountService接口定义的任意方法的执行
exection(* com.xx.service.AccoutService.*(..))
在Service包或者及其子包中定义的任意方法的执行:
execution (* com.xx.service...(..))