Spring(7)-事件(Application Event)

13 篇文章 0 订阅
1.简要说明

Spring的事件( Application Event) 为Bean与Bean之间的消息通信提供了支持。当一个
Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让另
外一个Bean监听当前Bean所发送的事件。
Spring的事件需要遵循如下流程:
(1)自定义事件,集成ApplicationEvent.
(2)定义事件监听器,实现ApplicationListener.
(3)使用容器发布事件。

2. 自定义事件
package com.lglg.springdemo01;

import org.springframework.context.ApplicationEvent;

/**
 * Date:2020/8/15
 * 自定义事件
 * @author:lg
 */
public class DemoEvent extends ApplicationEvent {

    private static final long serialVersionUID = 1L;

    private String msg;
    public DemoEvent(Object source,String msg) {

        super(source);
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

3.自定义事件监听器
package com.lglg.springdemo01;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * Date:2020/8/15
 *  事件监听器
 * @author:lg
 */
@Component
public class DemoListener implements ApplicationListener<DemoEvent>{


    /**
     * ①实现ApplicationListener接口,
        并指定监听的事件类型。
        ②使用onApplicationEvent方法对消息进行接受处理。

     * @param demoEvent
     */

    @Override
    public void onApplicationEvent(DemoEvent demoEvent) {
        String msg = demoEvent.getMsg();

        System.out.println("我(bean-demolistener) 接收到了bean-dePublisher发布的消息:" + msg);
    }
}

4.编写事件发布类
package com.lglg.springdemo01;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

/**
 * Date:2020/8/15
 *
 * @author:lg
 */
@Component
public class DemoPublisher {

    /**
     * ①注入ApplicationContext用来发布事件。

     * ②使用ApplicationContext的publishEvent 方法来发布。
     */
    @Autowired
    private ApplicationContext applicationContext;

    public void publish(String msg){

        applicationContext.publishEvent(new DemoEvent(this,msg));
    }
}

5.编写配置类
package com.lglg.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * Date:2020/8/9
 *
 * @author:lg
 */
@Configuration
@ComponentScan("com.lglg")// 扫面相应的包路径
//@EnableAspectJAutoProxy //  注解开启Spring对AspectJ代理的支持
public class EventConfig {

//    @Bean// 通过该注解将该方法上的bean注入到Spring容器中
//    public FunctionService functionService(){
//        return new FunctionService();
//    }
//
//    @Bean
//    public UserFunctionService userFunctionService(){
//        return new UserFunctionService();
//    }
}

6.编写测试类
package com.lglg.demoTest;

import com.lglg.config.EventConfig;
import com.lglg.springdemo01.DemoPublisher;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Date:2020/8/15
 *
 * @author:lg
 */
public class Demo07 {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
        DemoPublisher bean = context.getBean(DemoPublisher.class);
        bean.publish("i am lg");
        context.close();
    }
}

7.运行效果

我(bean-demolistener) 接收到了bean-dePublisher发布的消息:i am lg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值