Spring常用配置——SpringEvent

38人阅读 评论(0) 收藏 举报
分类:

Spring的事件(Application Event)为Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另一个Bean知道并能做相应的处理,这是我们就需要让另外一个Bean监听当前Bean所发送的事件

Spring的事件需要遵循如下流程:

(1)自定义事件,继承ApplicationEvent

(2)定义事件监听器,实现ApplicationListener

(3)使用容器发布事件。

示例代码:

DemoEvent.java

package com.minivison.caixing.learn.event;

import org.springframework.context.ApplicationEvent;

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
public class DemoEvent extends ApplicationEvent {

    private static final long serialVersionUID = -2419537024459602985L;
    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;
    }
}

DemoListener.java

package com.minivison.caixing.learn.event;

import jdk.internal.org.objectweb.asm.tree.TryCatchBlockNode;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {

    @Override
    public void onApplicationEvent(DemoEvent demoEvent) {
        String msg = demoEvent.getMsg();
        try {
            System.out.println("我接收到消息:" + msg);
            /*
            for(;;){

            }
*/
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

DemoService.java

package com.minivison.caixing.learn.event;

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

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
@Service
public class DemoService {

    @Autowired
    private ApplicationContext context;

    public void msg(String msg){
        context.publishEvent(new DemoEvent(this,msg));
        System.out.println(msg);
    }


}

EventConfig.java

package com.minivison.caixing.learn.event;

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

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月17日 <br>
 */
@Configuration
@ComponentScan("com.minivison.caixing.learn.event")
public class EventConfig {
}

Main.java

package com.minivison.caixing.learn;

import com.minivison.caixing.learn.beaninit.BeanConfig;
import com.minivison.caixing.learn.beaninit.BeanWayService;
import com.minivison.caixing.learn.beaninit.JSR250WayService;
import com.minivison.caixing.learn.common.ElConfig;
import com.minivison.caixing.learn.event.DemoService;
import com.minivison.caixing.learn.event.EventConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.util.Base64Utils;

import javax.imageio.stream.FileImageInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * <Description> <br>
 *
 * @author caixing<br>
 * @version 1.0<br>
 * @taskId <br>
 * @CreateDate 2018年04月12日 <br>
 */
public class Main {
    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
        DemoService service = context.getBean(DemoService.class);
        service.msg("hello event");
        context.close();
        //String str = Base64Utils.encodeToString(image2byte("E:\\123.jpg"));
        //System.out.println(str);

    }

    public static byte[] image2byte(String path) {
        byte[] data = null;
        FileImageInputStream input = null;
        try {
            input = new FileImageInputStream(new File(path));
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int numBytesRead = 0;
            while ((numBytesRead = input.read(buf)) != -1) {
                output.write(buf, 0, numBytesRead);
            }
            data = output.toByteArray();
            output.close();
            input.close();
        } catch (FileNotFoundException ex1) {
            ex1.printStackTrace();
        } catch (IOException ex1) {
            ex1.printStackTrace();
        }
        return data;
    }
}

查看评论

在VC中实现程序在启动时隐藏

    最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。    对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.s...
  • AttaBoy
  • AttaBoy
  • 2002-03-03 09:18:00
  • 1226

Spring的ApplicationEvent事件和监听器的测试Demo

  • 2016年07月06日 14:53
  • 31KB
  • 下载

Spring event应用

当我们在实现某些特定业务逻辑时,通常会通过发送事件的方式实现代码解耦,这也是观察者模式的一种体现。从spring 3.0.5为我们实现了用annotation实现event和eventListner。...
  • tianwei7518
  • tianwei7518
  • 2017-05-25 00:32:51
  • 666

Spring 的监听ApplicationListener 和 ApplicationEvent

原文链接: 1 Spring  监听事件 ApplicationListener 和 ApplicationEvent http://blog.csdn.net/ilovejava_2010/ar...
  • wabiaozia
  • wabiaozia
  • 2017-11-26 15:12:18
  • 414

spring中自定义Event事件的使用和浅析

在我目前接触的项目中,用到了许多spring相关的技术,框架层面的spring、spring mvc就不说了,细节上的功能也用了不少,如schedule定时任务、Filter过滤器、 intercep...
  • tuzongxun
  • tuzongxun
  • 2016-12-14 12:13:56
  • 7482

12-SpringBoot——Spring MVC基础-常用配置

Spring MVC 的定制配置需要我们的配置类继承一个WebMvcConfigurerAdapter 类,并在此类使用@EnableWebMvc 注解,来开启对Spring MVC 的配置支持,这样...
  • DERRANTCM
  • DERRANTCM
  • 2017-08-09 07:43:00
  • 871

Spring 注解事件Event

String event 从Spring的4.2版本后,开始支持注解来进行事件广播接收,这使得我们非常方便 当然了Spring也支持JMS消息中间件,这个就可以做多个系统集成了,感觉有点偏题...
  • u010475041
  • u010475041
  • 2016-08-28 18:46:03
  • 5957

java事件监听机制,spring中的event listener模式和解耦

event,listener是observer模式一种体现,在spring 3.0.5中,已经可以使用annotation实现event和eventListner里。 我们以spring-webfl...
  • feicongcong
  • feicongcong
  • 2017-07-25 14:14:56
  • 2158

Spring_配置文件格式介绍--真的蛮详细

http://blog.csdn.net/zzjjiandan/article/details/22922847
  • LeeJ1990
  • LeeJ1990
  • 2015-07-31 10:04:37
  • 298

Spring3.2小结

  • 2013年02月20日 12:43
  • 595KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 928
    积分: 259
    排名: 30万+
    最新评论