Java高级开发Spring面试之事件

Spring 中的所有哪些不同类型的事件?

Spring的ApplicationContext提供了支持事务和代码中添加监听器的功能。 

可以创建一个bean其实现ApplicationListener接口(类型是ApplicationEvent),当一个ApplicationEvent 被发布后,bean就自动被通知,并且在方法onApplicationEvent(…)方法中处理该事件。

public class AllApplicationEventListener implements ApplicationListener < ApplicationEvent > { @Override public void onApplicationEvent(ApplicationEvent applicationEvent) { //process event } }

 

在Spring中有5中标准的事件: 

1. 上下文更新事件(ContextRefreshedEvent):该事件会在ApplicationContext被初始化或者更新时发布,也可以在调用ConfigurableApplicationContext接口中的refresh()方法时被触发。 

2. 上下文开始事件(ContextStartedEvent): 当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时被触发。 

3. 上下文停止事件(ContextStoppedEvent): 当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。 

4. 上下文关闭事件(ContextClosedEvent): 当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。 

5. 请求处理事件(RequestHandledEvent): 在Web应用中,当一个http请求(request)结束触发该事件。

//spring也让用户可以自定义事件类型,继承ApplicationEvent。
public class CustomApplicationEvent extends ApplicationEvent { 
    public CustomApplicationEvent ( Object source, final String msg ) { 
        super(source); 
        System.out.println("Created a Custom event"); 
    } 
}

//为了监听这个事件,还需要创建一个监听器:
public class CustomEventListener 
implements ApplicationListener < CustomApplicationEvent >{     
    @Override 
    public void onApplicationEvent(CustomApplicationEvent applicationEvent) { 
        //handle event 
    } 
}


//之后通过applicationContext接口的publishEvent()方法来发布自定义事件。
CustomApplicationEvent customEvent = 
new CustomApplicationEvent(applicationContext, "Test message"); applicationContext.publishEvent(customEvent);

你可能感兴趣的:(Spring原理,Spring使用,Java面试)