`
阅读更多
    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);
		}
	}
 

 

分享到:
评论

相关推荐

    mybatis-spring-1.3.3.jar官方下载

    4. **MapperFactoryBean**:它是 Spring 的 FactoryBean,用于实例化 Mapper 接口并注入到 Spring 容器。这样,我们可以在 Spring 环境中通过 DAO 接口直接调用 SQL 方法,而无需关心实现细节。 5. **Transaction ...

    mybaits-spring(ibatis-spring)-1.0.2-bundle

    3. MapperFactoryBean:MyBatis-Spring提供的一种工厂bean,用于将Mapper接口自动注入到Spring容器中,使得可以直接调用Mapper接口的方法进行数据操作,无需创建Mapper实例。 4. TransactionalExecutor:这是...

    mybatis-spring-1.0.1-bundle mybatis spring 官方下载

    此外,它还支持自动管理 SqlSession 的生命周期,避免了手动关闭 SqlSession 所带来的潜在资源泄漏问题。 2. **SqlSessionFactoryBean** `SqlSessionFactoryBean` 是 MyBatis-Spring 提供的一个关键组件,用于创建...

    Spring系列面试题129道(附答案解析)

    其核心思想是反转控制(IoC),即控制权由应用代码转移到了Spring容器。 10、什么是依赖注入? 依赖注入(DI)是一种设计模式,它允许一个对象通过构造器、工厂方法的参数或属性来定义它们对其他对象的依赖关系,...

    mybatis-spring整合包.zip

    6. **MapperScannerConfigurer**:Spring配置中可以使用MapperScannerConfigurer来扫描指定包下的所有Mapper接口,将它们加入到Spring容器中。 在实际项目中,开发者只需关注业务逻辑,而无需关心数据访问层的细节...

    Spring bean生命周期demo

    当Spring容器关闭时,或者如果Bean声明了`destroy-method`,则会调用销毁回调方法。这是清理资源和执行关闭操作的最佳时机。同样,`DisposableBean`接口的`destroy()`方法也可以用于此目的。 9. **Bean的销毁** ...

    Spring高级篇二.pdf

    - 需要注意的是,`destroy-method`仅对单例`scope="singleton"`的Bean有效,并且只有在手动关闭`ApplicationContext`对象时才会被调用。 - **完整的生命周期**: - Spring Bean的生命周期包括了从创建到销毁的一...

    spring和quartz的定时器的启动和停止例子

    -- 当Spring容器关闭时,是否等待所有正在运行的任务完成 --> ``` 3. **创建Job和Trigger**:定义一个实现了`org.quartz.Job`接口的类,该类表示要执行的任务。然后创建一个`org.quartz.Trigger`,指定任务的...

    spring与hibernate的整合

    这样,Spring 会在调用 `addDepartment()` 方法时自动开启、提交或回滚事务,无需在业务代码中手动管理。 总结来说,Spring 与 Hibernate 的整合主要涉及 SessionFactory 的配置、DAO 类的实现以及事务管理。通过 ...

    spring jdbc.zip

    通过配置文件,我们可以轻松地设置数据源,并让Spring自动管理这些连接,避免了手动管理连接带来的问题。 此外,Spring JDBC还支持事务管理。通过TransactionManager接口,我们可以声明式或编程式地控制事务的边界...

    Spring与MyBatis案例

    在配置文件中定义bean及其依赖,Spring容器负责创建和装配这些bean。 2. **MyBatis的配置**:MyBatis的配置主要包括SqlSessionFactory的创建,这是MyBatis的核心,用于生成SqlSession对象,进而执行SQL语句。此外,...

    Spring实现增删改查

    1. **依赖注入(DI)**:在Spring框架中,DI是一种设计模式,它允许对象之间的关系在运行时被外部容器管理,而不是在代码中硬编码。通过XML配置或注解方式,我们可以声明对象之间的依赖关系,Spring会自动进行实例化...

    Spring 资料.rar

    3. **Spring整合JDBC**:Spring提供了JdbcTemplate和NamedParameterJdbcTemplate等工具类,简化了JDBC操作,避免了资源手动关闭等常见错误。这些模板类可以帮助我们更好地管理数据库连接,提高代码可读性和可维护性...

    spring02-3

    当我们创建一个`abstract="true"`的bean定义时,Spring容器不会尝试创建该bean,而是将其作为其他bean的父类,让子bean继承其属性和配置。这在我们需要定义一组有共同配置的bean时非常有用,而具体实现则由子bean...

    spring-demo

    它们帮助我们定义和管理Spring容器中的对象。 6. **Spring Boot集成**: 虽然题目没有提及Spring Boot,但现代Spring应用往往采用Spring Boot进行快速开发,因为它简化了配置并提供了自动配置功能。Spring Boot...

    简单记录spring 实现IOC的流程

    8. **关闭容器**:应用结束时,Spring容器会处理bean的销毁过程,调用`destroy-method`指定的方法。 通过这种方式,Spring的IOC特性使得我们的代码更加松耦合,易于测试和维护。同时,它还提供了AOP(面向切面编程...

    mybatis-spring最新整合包

    MyBatis-Spring是MyBatis和Spring之间的桥梁,它负责在Spring容器中管理MyBatis的所有组件,如SqlSessionFactory、SqlSessionTemplate和MapperFactoryBean等。通过这个整合,我们可以利用Spring的依赖注入(DI)和...

    Spring的学习笔记

    - **IOC/DI**:控制反转(IOC)是指对象的创建和管理由Spring容器负责,依赖注入(DI)是实现IOC的一种方式,通过配置文件或注解将依赖关系注入到对象中。 - **setter注入和构造器注入**:两种常见的DI方式,setter...

Global site tag (gtag.js) - Google Analytics