切面=关注点+模块化
关注点:所关心的程序的一个功能,代码表达
target:被通知对象,关注的原始对象(包含所关注功能的对象,目标对象)
连接点:包含关注点的方法,add1,add2
target、连接点两者关系:target包含连接点。
切入点:匹配连接点的断言,即连接点的集合,连接点的模块化。
advice:某个特定连接点上的动作。独立出来共同的,关注点功能的真正实现
AOP代理:动态把连接点和advice对接起来。
Weaving:织入。advice和原始功能的结合。把切面连接到其他的应用程序类型或者对象上,并创建一个被通知(advised)的对象。做一个东西,加进去。
如何做AOP?
1 找共性功能点→出现关注点→包含关注点的方法(连接点)→包含关注点的对象
spring观察,一旦连接点被调用,开始在配置文件中匹配,连接点与Advice对应,代理开始调用Advice执行。然后将这个实现的功能回贴给target(织入),相当于在原来的墙上在刷一层。实际上是Advice贴到target上。
2 任何技术都不是全新的。AOP模型→实际就是事件机制,模拟了事件机制。这些连接点实际就是事件源,在xml里注册了这些事件源,监听器:Spring。一旦**调用即触发事件,监听器Spring便分发处理(根据xml配置)。Advice相当于事件处理器。不同之处:处理完还需要Weaving。思想还是通过Spring寻找外部资源。target要什么?Spring帮你找到资源(Advice),贴给你。
好处:共同的东西提取出来,动态地回贴回去。Weaving的特点:没有去要,别人悄悄地贴给你。谁控制?配置文件。你要回贴什么,他要回贴什么,都有记录哦。
与注入(DI)区别:DI还需要主动去要。
servlet中独立出jsp用来显示,jsp实际也是servlet,没有jsp,单servlet也能实现显示的功能。如果没有AOP,这些通用的功能也是要实现的,而现在我们只是把它们独立出来,实现完后把这些回贴回去,构成完整的功能。