![](https://csdnimg.cn/release/download_crawler_static/12570667/bg9.jpg)
需要⼿⼯编写代理类,代理类引⽤被代理对象。
实现原理:实现原理:
切⾯在应⽤运⾏的时刻被织⼊。⼀般情况下,在织⼊切⾯时,AOP容器会为⽬标对象创建动态的创建⼀个代理对象。SpringAOP
就是以这种⽅式织⼊切⾯的。
织⼊:把切⾯应⽤到⽬标对象并创建新的代理对象的过程。
7. 观察者模式7. 观察者模式
实现⽅式:实现⽅式:
spring的事件驱动模型使⽤的是 观察者模式 ,Spring中Observer模式常⽤的地⽅是listener的实现。
具体实现:具体实现:
事件机制的实现需要三个部分,事件源,事件,事件监听器
ApplicationEvent抽象类 [事件]
继承⾃jdk的EventObject,所有的事件都需要继承ApplicationEvent,并且通过构造器参数source得到事件源.
该类的实现类ApplicationContextEvent表⽰ApplicaitonContext的容器事件.
代码:
publicpublic abstractabstract classclass ApplicationEventApplicationEvent extendsextends EventObjectEventObject {
privateprivate staticstatic finalfinal longlong serialVersionUID = 7099057708183571937L;
privateprivate finalfinal longlong timestamp;
publicpublic ApplicationEventApplicationEvent(Object source) {
supersuper(source);
thisthis.timestamp = System.currentTimeMillis();
}
publicpublic finalfinal longlong getTimestampgetTimestamp() {
returnreturn thisthis.timestamp;
}
}
ApplicationListener接⼝ [事件监听器]
继承⾃jdk的EventListener,所有的监听器都要实现这个接⼝。
这个接⼝只有⼀个onApplicationEvent()⽅法,该⽅法接受⼀个ApplicationEvent或其⼦类对象作为参数,在⽅法体中,可以通过不
同对Event类的判断来进⾏相应的处理。
当事件触发时所有的监听器都会收到消息。
代码:
publicpublic interfaceinterface ApplicationListenerApplicationListener<EE extendsextends ApplicationEventApplicationEvent> extendsextends EventListenerEventListener {
voidvoid onApplicationEventonApplicationEvent(E event);
}