Spring容器内置事件,如容器的启动、停止、关闭、销毁等事件

<bean name="contextStartedHandler" class="com.nuts.demo.spring.ContextStartedHandler">
</bean>
<bean name="contextStopedHandler" class="com.nuts.demo.spring.ContextStopedHandler"/>
public class ContextStartedHandler implements ApplicationListener<ContextStartedEvent> {

    @Override
public void onApplicationEvent(ContextStartedEvent contextStartedEvent) {
System.out.println("Spring容器启动完成");
}
}
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
context.start();//启动容器
context.stop();//停止容器
}

也可以自定义事件:

1、通过扩展 ApplicationEvent,创建一个事件类 CustomEvent。这个类必须定义一个默认的构造函数,它应该从 ApplicationEvent 类中继承的构造函数。一旦定义事件类,你可以从任何类中发布它

public class CustomEvent extends ApplicationEvent {
public CustomEvent(Object source) {
super(source);
}
public String toString(){
return "自定义事件";
}
}

2、自定义事件处理器,实现ApplicationListener接口,关注自定义的CustomEvent事件

/**
* 自定义事件处理器
*/
public class CustomEventHandler implements ApplicationListener<CustomEvent> {
@Override
public void onApplicationEvent(CustomEvent customEvent) {
System.out.println("事件被处理了:"+customEvent.toString());
}
}

3、定义事件处理器

/**
* 事件发布器
*/
public class MyEventPublisher implements ApplicationEventPublisherAware { ApplicationEventPublisher applicationEventPublisher;
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
}
public void publish(){
CustomEvent customEvent = new CustomEvent("事件相关的数据");
applicationEventPublisher.publishEvent(customEvent);
}
}

4、发布事件

public class SpringMain {

    public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
MyEventPublisher publisher = context.getBean(MyEventPublisher.class);//构造发布器
publisher.publish();//发布事件
}
}

5、配置发布器、事件处理器

    <bean name="myEventPublisher" class="com.nuts.demo.spring.MyEventPublisher">
</bean>
<bean name="customEventHandler" class="com.nuts.demo.spring.CustomEventHandler"/>

Spring容器事件、自定义事件的更多相关文章

  1. 48、[源码]-Spring容器创建-初始化事件派发器、监听器等

    48.[源码]-Spring容器创建-初始化事件派发器.监听器等 8.initApplicationEventMulticaster();初始化事件派发器: 获取BeanFactory 从BeanFa ...

  2. 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作

    上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...

  3. Spring中实现自定义事件

    原理: 通过扩展ApplicationEvent,创建一个事件类CustomEvent.这个类必须定义一个默认的构造函数,它应该从ApplicationEvent类中继承的构造函数. 一旦定义事件类, ...

  4. Spring(十)之自定义事件

    编写自定义事件的简单流程如下: (1)编写CustomEvent.java package com.tutorialspoint; import org.springframework.context ...

  5. 主动触发事件 自定义事件 trigger 及其用法

    1. 触发自定义事件方式 js.jq 2. jq 触发 2.1 默认支持的事件 $('#h').on('click',function(){ $(this).append('<p>p< ...

  6. C#事件-自定义事件的使用方法(转载)

    1.声明一个委托类 public delegate SomethingChangedHandler(object sender,EventArgs e); 2.在你的类中声明一个事件绑定到该委托 pu ...

  7. Java的事件自定义事件学习

    课程设计要做一个游戏,由于对C++不是很熟悉,老师也准许使用java 或者其他的语言,在.net我学过事件,一种委托回调,但是在java 我不是很了解,应该原理都相同吧! 游戏大致是这样的,现在这在写 ...

  8. Spring Boot(六)自定义事件及监听

    事件及监听并不是SpringBoot的新功能,Spring框架早已提供了完善的事件监听机制,在Spring框架中实现事件监听的流程如下: 自定义事件,继承org.springframework.con ...

  9. Spring源码解析-事件

    Spring事件的组件 主要是3个组件: 1.ApplicationEvent   事件 2.ApplicationListener 监听器,对事件进行监听 3.ApplicationEventMul ...

随机推荐

  1. Head First Java & 重载 覆盖

  2. angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程

    官网上的解释为: The $http service is a core AngularJS service that facilitates communication with the remot ...

  3. iOS 如何改变搜索取消按钮的值和颜色

    在初始化的时候加上下面两句就行了,试了无数方法,什么遍历查找子元素啊什么的都白搭,也不知道为啥还说可以,下面代码测试是有效果的: //改变搜索取消按钮的文字颜色 [[UIBarButtonItem a ...

  4. selenium使用execl实现数据驱动测试

    import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.uti ...

  5. delphi手动创建dataset并插入值

    unit Unit1; interface uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  6. delphi ERP框架

    之前做c/s架构,接了有家装饰的一个ERP项目,做了一个ERP框架,现在转后端开发了,这些东西还是蛮怀念的,就开源出来吧,有需要的同学可以参考. https://github.com/qianlnk/ ...

  7. 浅谈C++/JAVA/C#运行机制和执行效率

    估计有很多同学都对C++/JAVA/C#这三大热门语言的运行机制和执行效率有或多或少的困惑,自己也有,但是经过前期的学习,了解了三者在这两方面的区别,就废话不说了,进入主题吧.         一.运 ...

  8. 关于#pragma comment

    #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"ws2_32.lib")表示连接Ws2_32.li ...

  9. 字符串(string)与整型(int)、浮点型(float)等之间的转换

    #include <stdlib.h> 1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下 ...

  10. P3919 【模板】可持久化数组(可持久化线段树/平衡树)

    题目描述 如题,你需要维护这样的一个长度为 N  的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生成一个完全一 ...