spring中提供一些aware相关的接口,beanfactoryaware、 applicationcontextaware、resourceloaderaware、servletcontextaware等等,其中最常用到的是applicationcontextaware。实现applicationcontextaware的bean,在bean被初始后,将会被注入 applicationcontext的实例。applicationcontextaware提供了publishevent()方法,实现observer(观察者)设计模式的事件传播机,提供了针对bean的事件传播功能。通过application.publishevent方法,我们可以将事件通知系统内所有的applicationlistener。
spring事件处理一般过程:
?定义event类,继承org.springframework.context.applicationevent.
?编写发布事件类publisher,实现org.springframework.context.applicationcontextaware接口.
?覆盖方法setapplicationcontext(applicationcontext applicationcontext)和发布方法publish(object obj)
?定义时间监听类eventlistener,实现applicationlistener接口,实现方法onapplicationevent(applicationevent event).
java 代码
java 代码
java 代码
在运行期,applicationcontext会自动在当前的所有bean中寻找applicationlistener接口的实现,并将其作为事件接收对象。当application.publishevent方法调用时,所有的applicationlistener接口实现都会被激发,每个applicationlistener可根据事件的类型判断是否是自己需要处理的事件,如上面的actionlistener只处理actionevent事件。
spring事件处理一般过程:
?定义event类,继承org.springframework.context.applicationevent.
?编写发布事件类publisher,实现org.springframework.context.applicationcontextaware接口.
?覆盖方法setapplicationcontext(applicationcontext applicationcontext)和发布方法publish(object obj)
?定义时间监听类eventlistener,实现applicationlistener接口,实现方法onapplicationevent(applicationevent event).
java 代码
| import org.springframework.context.applicationevent; /** * 定义事件信息 * @author new * */ public class messageevent extends applicationevent { private string message; public void setmessage(string message){ this.message = message; } public string getmessage(){ return message; } public messageevent(object source, string message) { super(source); this.message = message; // todo auto-generated constructor stub } private static final long serialversionuid = 1l; } |
java 代码
| import org.springframework.beans.beansexception; import org.springframework.context.applicationcontext; import org.springframework.context.applicationcontextaware; import org.springframework.context.support.filesystemxmlapplicationcontext; public class publisher implements applicationcontextaware { private applicationcontext context; @override public void setapplicationcontext(applicationcontext arg0) throws beansexception { // todo auto-generated method stub this.context = arg0; } public void publish(string message){ context.publishevent(new messageevent(this,message)); } public static void main(string[] args) { applicationcontext ctx = new filesystemxmlapplicationcontext("src/applicationcontext.xml"); publisher pub = (publisher) ctx.getbean("publisher"); pub.publish("hello world!"); pub.publish("the quick brown fox jumped over the lazy dog"); } } |
java 代码
| import org.springframework.context.applicationevent; import org.springframework.context.applicationlistener; public class messageeventlistener implements applicationlistener { @override public void onapplicationevent(applicationevent event) { // todo auto-generated method stub if(event instanceof messageevent){ messageevent msevent = (messageevent)event; system.out.println("received: " + msevent.getmessage()); } } } |
在运行期,applicationcontext会自动在当前的所有bean中寻找applicationlistener接口的实现,并将其作为事件接收对象。当application.publishevent方法调用时,所有的applicationlistener接口实现都会被激发,每个applicationlistener可根据事件的类型判断是否是自己需要处理的事件,如上面的actionlistener只处理actionevent事件。
闽公网安备 35060202000074号