什么是ApplicationContext?
它是spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 ApplicationContext则是应用的容器。Spring把Bean(object)放在容器中,需要用就通过get方法取出来。
ApplicationEvent
是个抽象类,里面只有一个构造函数和一个长整型的timestamp。
ApplicationListener
是一个接口,里面只有一个onApplicationEvent方法。所以自己的类在实现该接口的时候,要实装该方法。
如果在上下文中部署一个实现了ApplicationListener接口的bean,那么每当在一个ApplicationEvent发布到 ApplicationContext时,这个bean得到通知。其实这就是标准的Oberver设计模式。
下面给出例子:
首先创建一个ApplicationEvent实现类:
- package com.spring.event;
-
- import org.springframework.context.ApplicationEvent;
-
- /**
- * <p>Class:EmailListEventp>
- * <p>Description:p>
- * &#64;author Liam
- * &#64;Date [2012-9-7 上午8:42:07]
- */
- public class EmailEvent extends ApplicationEvent {
- /**
- * <p>Description&#xff1a;p>
- */
- private static final long serialVersionUID &#61; 1L;
- public String address;
- public String text;
-
- public EmailEvent(Object source) {
- super(source);
- }
-
- public EmailEvent(Object source, String address, String text) {
- super(source);
- this.address &#61; address;
- this.text &#61; text;
- }
-
- public void print(){
- System.out.println("hello spring event!");
- }
-
- }
给出监听器&#xff1a;
- package com.spring.event;
-
- import org.springframework.context.ApplicationEvent;
- import org.springframework.context.ApplicationListener;
-
- /**
- * <p>Class:EmailListenerp>
- * <p>Description:p>
- * &#64;author Liam
- * &#64;Date [2012-9-7 上午8:44:53]
- */
- public class EmailListener implements ApplicationListener {
-
- public void onApplicationEvent(ApplicationEvent event) {
- if(event instanceof EmailEvent){
- EmailEvent emailEvent &#61; (EmailEvent)event;
- emailEvent.print();
- System.out.println("the source is:"&#43;emailEvent.getSource());
- System.out.println("the address is:"&#43;emailEvent.address);
- System.out.println("the email&#39;s context is:"&#43;emailEvent.text);
- }
-
- }
-
- }
applicationContext.xml文件配置&#xff1a;
测试类&#xff1a;
- package com.spring.event;
-
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- /**
- * <p>Class:Testp>
- * <p>Description:p>
- * &#64;author Liam
- * &#64;Date [2012-9-6 上午10:41:34]
- */
- public class Test {
- public static void main(String[] args) {
- ApplicationContext context &#61; new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
-
- //HelloBean hello &#61; (HelloBean) context.getBean("helloBean");
- //hello.setApplicationContext(context);
- EmailEvent event &#61; new EmailEvent("hello","boylmx&#64;163.com","this is a email text!");
- context.publishEvent(event);
- //System.out.println();
- }
- }
测试结果&#xff1a;
- <pre class&#61;"html" name&#61;"code">hello spring event!
- the source is:hello
- the address is:boylmx&#64;163.com
- the email&#39;s context is:this is a email text!
- pre>
- <pre>pre>
关注微信公众号和今日头条&#xff0c;精彩文章持续更新中。。。。。