spring的事件机制

来源:互联网 发布:淘宝客服提成方案 编辑:程序博客网 时间:2024/05/17 07:07

本文来自于<<轻量级j2ee企业应用实战>>的例子.因读书有感,故写下来,以免以后不记得.

1.需求:首先我们用spring的事件机制来打印出今天2017年2月14日情人节  你最想说的话  (事件机制其实也就是观察者模式)

2.分析:我们spring事件机制的例子较为简单,分为以下四个步骤

2.1编写一个普通类1继承ApplicationEvent(该类是一个抽象类,里面你必须实现其构造函数,同时也是利用带参的构造函数来进行输入目标值)

2.2再编写一个普通类2实现ApplicationListener(该类是一个接口,你必须实现其内部的onApplicationEvent(ApplicationEvent arg0)同时注意的是该处必须是带参的,该方法内部正是引用普通类1中的参数并对参数进行输出,同时也用if()elese{}来选择该事件是否是容器本身事件)

2.3编写bean.xml   其中关键在于id="emaiListListener"(我现在也不是很懂得这里的id指向哪个bean的实例) 

2.4编写运行类   2.4.1将容器实例化  2.4.2创建ApplicationEvent对象 2.4.3调用publishEvent();来主动触发事件


3.接下来我贴下 我写的代码:

3.1

import org.springframework.context.ApplicationEvent;
//EmailEvent类继承了ApplicationEvent类,除此之外它就是一个普通的java类
//另外容器事件的监听器类必须实现ApplicationListener接口,我们就在另外一个类中实现这个方法
public class EmailEvent  extends ApplicationEvent{
    String address;
    String text;
    
    //这里必须定义一个有参的构造函数,否则会报错,同时事件机制也是利用这里的参数来引用你输入的值
    public EmailEvent(Object source,String address, String text) {
        super(source);
        this.address=address;
        this.text=text;
    }

}

3.2

public class EmailNotifier implements ApplicationListener{
    //该方法会在容器发生事件的时候自动触发
    @Override
    public void onApplicationEvent(ApplicationEvent evt) {
        if(evt instanceof EmailEvent){
            //发送Email通知...
            EmailEvent emailEvent=(EmailEvent) evt;
            System.out.println("需要发送邮件的接收地址"+emailEvent.address);
            System.out.println("需要发送邮件的邮件正文"+emailEvent.text);
        }
        else
        {
            //容器内置事件不做任何处理
            System.out.println("容器本身的事件"+evt);
            
        }
        
    }

}

3.3

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
     <!-- 配置监听器 -->
    <bean id="emailListListener" class="test.EmailNotifier"/>
</beans>


3.4


public class SpringTest {
    public static void main(String[] args) {
        //初始化ioc容器
        ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
        //创建一个ApplicationEvect对象
        EmailEvent ele=new EmailEvent("你好","www.baidu.com","我喜欢你很久了,情人节快乐!");
        //主动触发容器事件
        ac.publishEvent(ele);
    }
}

3.5实践运行类,输出你们情人节最想说的话


1 0