转载来源 http://wenku.baidu.com/view/8b833790daef5ef7ba0d3c76.html
ApplicationContext具有发布事件的能力,这是因为该接口继承了ApplicationEventPublisher接口。
Spring中与事件有关的接口和类主要包括ApplicationEvent、ApplicationListener。
定义一个事件的类需要继承ApplicationEvent或者ApplicationContextEvent抽象类,该抽象类中只有一个构造函数,
并且带有一个Object类型的参数作为事件源,并且该事件源不能为null,
因此我们需要在自己的构造函数中执行super(Object)。
public class UserEvent extends ApplicationEvent
{
private String eventContent;
public String getEventContent(){
return eventContent;
}
public void setEventContent(String eventContent){
this.eventContent = eventContent;
}
public UserEvent(Object source,String eventContent){
super(source);
this.eventContent = eventContent;
}
}
针对一种事件,可能需要特定的监听器,因此,监听器需要实现ApplicationListener接口。当监听器接收到一个事件的时候,就会执行它的onApplicationEvent()方法。由于Spring
IoC中的事件模型是一种简单的、粗粒度的监听模型,当有一个事件到达时,所有的监听器都会接收到,并且作出响应,如果希望只针对某些类型进行监听,需要在代码中进行控制。
public class UserListener implements ApplicationListener
{
public void onApplicationEvent(ApplicationEvent event){
if(event instanceof UserEvent){ //只对UserEvent类型进行处理
UserEvent ue =
(UserEvent)event;
String result =
ue.getEventContent();
System.out.println("Event
Content:"+result);
}
}
}
对于发布事件,我们可以实现ApplicationContextAware或者ApplicationEventPublisherAware接口。
public class UserBiz implements ApplicationContextAware
{
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) throws
BeansException
{
this.applicationContext = applicationContext;
}
public void service(String thing)
{
UserEvent event = new UserEvent(this,thing);
event.setEventContent("I shoud "+thing);
applicationContext.publishEvent(event);
}
}
或者如下:
public class UserBiz2 implements ApplicationEventPublisherAware
{
private ApplicationEventPublisher applicationEventPublisher;
public void setApplicationEventPublisher(ApplicationEventPublisher
applicationEventPublisher)
{
this.applicationEventPublisher = applicationEventPublisher;
}
public void service(String thing)
{
UserEvent event = new UserEvent(this,thing);
event.setEventContent("I shoud "+thing);
applicationEventPublisher.publishEvent(event);
}
}
至此便完成了事件的发布,当ApplicationContext接收到事件后,事件的广播是Spring内部给我们做的,不需要了解具体的细节。其实在Spring读取配置文件之后,利用反射,将所有实现ApplicationListener的Bean找出来,注册为容器的事件监听器。当接收到事件的时候,Spring会逐个调用事件监听器。剩下要做的就是在配置文件中配置监听器。
<bean class="footprint.spring.ioc.event.UserListener"/>
Spring容器自身会发布一些事件,包括ContextClosedEvent、ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent。
分享到:
相关推荐
在Spring框架中,`ApplicationContext`不仅是一个容器,用于管理Bean的生命周期和依赖注入,它还提供了事件发布和监听的功能。这个特性使得Spring应用能够实现组件间的异步通信,类似于消息队列(MQ)的工作模式。...
在Spring中,所有自定义事件都需要继承`ApplicationEvent`类。例如,我们可以通过以下方式定义一个用户事件: ```java public class UserEvent extends ApplicationEvent { private String eventContent; public...
Spring中ApplicationContext加载机制 ApplicationContext 是 Spring 框架中的核心组件之一,负责加载和管理应用程序中的 Bean 对象。在 Web 应用程序中,ApplicationContext 的加载机制是非常重要的, Spring 提供...
在Spring中,ApplicationContext(应用程序上下文)是容器的核心,负责配置和管理应用中对象的生命周期和依赖关系。在实际开发过程中,经常需要从各个角落获取到这个ApplicationContext对象,以便于能够使用Spring...
首先,BeanFactory是Spring中最基础的bean管理容器,它遵循Java的工厂设计模式,负责管理和控制bean的生命周期。BeanFactory提供了加载配置元数据、实例化bean、注入依赖、管理bean生命周期等基本功能。当我们在配置...
ApplicationContext还支持Bean的懒加载、单例或多例管理、Profile功能(根据环境选择加载不同的配置)、以及与其他Spring模块(如Spring Data、Spring Security等)的集成。 总的来说,ApplicationContext作为...
本文将深入探讨如何在Spring中获取`ApplicationContext`的公用方法,并结合提供的两个文件名`ShipOrderRecipientImpl.java`和`MyApplicationContextUtil.java`来分析可能的实现方式。 1. `ApplicationContext`概述...
在Java世界中,Spring框架是应用开发的核心框架之一,它为构建高质量的、松散耦合的Java应用程序提供了强大的支持。在Spring框架中,ApplicationContext是核心接口,它扮演着应用程序上下文的角色,负责管理和提供...
在Spring框架中,`applicationContext.xml`是应用上下文的核心配置文件,用于定义bean的创建、依赖关系以及各种服务的配置。这篇博文“Spring 2.5 - applicationContext.xml提示信息的配置”主要探讨了如何在Spring ...
在Spring中,我们通常会通过`@Service`注解标记此类,并使用`@Autowired`注解注入所需的其他服务或DAO。服务类可能会有一个方法来启动或唤醒Quartz Job,这个方法可能会调用Quartz的`Scheduler`接口的相关方法。 接...
2. **配置Scheduler**:在`applicationContext.xml`中,我们需要创建一个`SchedulerFactoryBean`,这是Spring对Quartz Scheduler的封装,它负责初始化和管理Scheduler实例。例如: ```xml ...
总的来说,理解并熟练运用Spring中Bean的生命周期和ApplicationContext,能帮助开发者更高效地设计和维护Spring应用,同时利用国际化和事件传递提高应用的灵活性和可扩展性。在实践中,这些概念和机制是构建复杂、...
Spring配置文件ApplicationContext,内容齐全,有需要的可以下载。
在Spring框架中,`applicationContext.xml`是核心的配置文件,它定义了bean的实例化、依赖注入、服务的装配以及整个应用上下文的行为。在Spring 2.5版本中,这个配置文件引入了许多增强的功能,提升了开发效率和灵活...
以上就是Spring中配置数据源的基本步骤,通过`applicationContext.xml`文件,你可以根据项目需求灵活调整数据源配置,确保数据库连接的高效和稳定。在实际开发中,你可能还需要考虑更多因素,比如数据库连接池的优化...
在Spring中,有两种代理模式:JDK动态代理和CGLIB代理。 1. JDK动态代理:当目标bean实现了至少一个接口时,Spring会使用Java的反射API创建一个代理类,该类实现了目标bean的所有接口,并在调用接口方法时插入增强...
首先,BeanFactory是Spring中最基本的bean容器,它提供了对bean实例化、配置和管理的基本功能。通过BeanFactory,开发者可以注册bean定义,然后在运行时按需获取bean实例。BeanFactory支持延迟初始化,这意味着bean...
在使用Spring事件机制实现异步的方法时,通常需要将事件监听器添加到ApplicationContext中。在上面的代码中,使用@SpringBootApplication的addListeners方法将MyListener添加到ApplicationContext中。 使用@Event...
Spring Web MVC开发 xml配置文件格式,无bean之类 Spring Web MVC开发配置文件 applicationContext