Spring 广播事件实现

完成功能:
完成广播功能,即当做一件事情的是,自动触发广播,同时告知其他人。
实现思路:
1.定义一个事件类例如MailSendEvent 继承ApplicationContextEvent
2.定义一个监听类MailSendListener实现接口ApplicationListener,重写函数onApplicationEvent用于实现当监听到事件之后就进行广播
3.定义实体类MailSender实现接口ApplicationContextAware,获取上下文,并事件MailSendEvent放入ApplicationContext容器中
5.在Spring XML中配置实体类和监听类

事件类

package com.event;

import org.springframework.context.ApplicationContext;
import org.springframework.context.event.ApplicationContextEvent;

/**
 * 广播事件
 * @author Duoduo
 * @version 1.0
 * @date 2017/4/22 10:37
 */
public class MailSendEvent extends ApplicationContextEvent {

    private String sendTo;

    public MailSendEvent(ApplicationContext source, String sendTo) {
        super(source);
        this.sendTo = sendTo;
    }

    public String getSendTo() {
        return sendTo;
    }

    public void setSendTo(String sendTo) {
        this.sendTo = sendTo;
    }
}

监听广播类

package com.event;

import org.springframework.context.ApplicationListener;

/**
 * 广播监听
 * @author Duoduo
 * @version 1.0
 * @date 2017/4/22 12:05
 */
public class MailSendListener implements ApplicationListener<MailSendEvent> {
    @Override
    public void onApplicationEvent(MailSendEvent mailSendEvent) {
        System.out.println("MailSendListener send to "+mailSendEvent.getSendTo()+" a email");
    }
}

实体类

package com.event;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * @author Duoduo
 * @version 1.0
 * @date 2017/4/22 12:09
 */
public class MailSender implements ApplicationContextAware {
    private  ApplicationContext ctx;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.ctx = applicationContext;
    }

    public  void sendMail(String  sendTo ){
        System.out.println("MailSender send mai ...");

        MailSendEvent mailSendEvent = new MailSendEvent(this.ctx, sendTo);
        ctx.publishEvent(mailSendEvent);
    }
}

Spring XML文件配置

<bean id="MailSendListener" class="com.event.MailSendListener"/>
<bean id="MailSender" class="com.event.MailSender"/>

使用JUnit进行测试

@Test
public void testSetApplicationContext() throws Exception {
    ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/spring-another-context.xml");
    MailSender mailSender = (MailSender)ctx.getBean("MailSender");
    mailSender.sendMail("123@qq.com");

}

运行结果:当MailSender发送邮件的时候,自动触发广播。

MailSender send mai …
MailSendListener send to 123@qq.com a email

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值