Spring应用在web系统中,如果web服务停止,servlet容器会触发关闭事件并通知ContextLoaderListener,ContextLoaderListener中contextDestroyed方法调用closeWebApplicationContext(event.getServletContext())销毁Spring容器;但对于非web应用项目,则需要手动去关闭Spring;
不过手动关闭Spring容器也很容易,Spring中ApplicationContext实现类大都继承AbstractApplicationContext,而AbstractApplicationContext中定义了一个registerShutdownHook()的方法,不需要参数,只需要显示调用此方法即可,方法实现中会向jvm绑定一个系统钩子,在关闭时将执行此钩子;非web项目通常需要手工创建ApplicationContext,样例代码如下:
import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.*; import org.springframework.context.support.AbstractApplicationContext; public class ServerApplication { //private static final ILog LOG = LogFactory.getLog(ServerApplication.class); public static void main(String[] args) { long b = System.currentTimeMillis(); //Spring启动时,会自动触发各Service启动 ApplicationContext context = new AnnotationConfigApplicationContext(ServerApplication.class); long e = System.currentTimeMillis(); // LOG.info("ServerApplication started successfully in "+(e-b)+"ms."); if(context instanceof AbstractApplicationContext) { ((AbstractApplicationContext)context).registerShutdownHook(); } } }
看下registerShutdownHook实现,如下所示,会调用doClose()来关闭Spring容器。
@Override public void registerShutdownHook() { if (this.shutdownHook == null) { // No shutdown hook registered yet. this.shutdownHook = new Thread() { @Override public void run() { doClose(); } }; Runtime.getRuntime().addShutdownHook(this.shutdownHook); } }
相关推荐
spring容器启动和关闭时事件监听;spring容器启动和关闭时事件监听;spring容器启动和关闭时事件监听
Spring容器 .ppt Spring容器 .ppt
在Service端,自定义ApplicationContext,获取Spring容器。从而,通过编码的形式,手动获取注册到容器中的对象。
在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息,在大数据采集项目中用到的,已经测试过了
Spring容器的通俗理解及简单写法 手动写一个非常粗犷且简单的IOC容器。 用到了java的一些基础知识,比如说读取文件资源,反射,自定义注解的实现及使用等
实现将一个接口动态代理,并将该代理对象在spring容器初始化完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象
常用的获取spring容器的方法
SpringBoot 应用动态编译 Java 源码并注入 Spring 容器,实现动态修改接口和抽象类的实现。注意,项目以 Jar 包形式启动时要在命令行引入 tools.jar 的包,IDEA下可直接调试。 基于接口、抽象类实现不停机动态调整...
Spring 容器后处理器
NULL 博文链接:https://huangminwen.iteye.com/blog/1874200
他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。 Bean是Spring管理的基本单位,在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源、Hibernate的...
spring容器学习笔记
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
使用了dom4j相关包,spring通过反射机制实现bean的创建等,完成bean的管理
搭建流程在这里http://blog.tbaqkj.com/article/25,欢迎关注http://blog.tbaqkj.com,每日更新不一样的技术
NULL 博文链接:https://java-mzd.iteye.com/blog/829890
spring动态向容器中添加bean和删除指定bean,不需要重启应用
MyEclipse手动添加Spring支持
spring简单实例,一看就懂,介绍spring基本配置
Spring容器中IOC