手动加载spring, ApplicationContext怎么销毁

本文介绍了在非Web应用中如何正确地使用Spring框架的手动IoC容器管理方式。重点讲解了使用AbstractApplicationContext类来加载配置文件,并强调了使用ctx.close()方法关闭容器的重要性,以防资源泄露,特别是数据库连接未被释放的问题。

原帖地址http://blog.sina.com.cn/s/blog_5db0dfe40101bsb4.html

感谢原帖博主

	AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	ctx.close();

在非Web应用中,手工加载Spring IoC容器,不能用ApplicationContext,要用AbstractApplicationContext。用完以后要记得调用ctx.close()关闭容器。如果不记得关闭容器,最典型的问题就是数据库连接不能释放

### Spring 中 BeanFactory 和 ApplicationContext 的区别及用途 #### 1. 功能范围 `BeanFactory` 是 Spring 框架中的基础容器,提供最基本的依赖注入功能。它主要负责管理 Bean 的生命周期、实例化和依赖解析[^3]。相比之下,`ApplicationContext` 是 `BeanFactory` 的扩展版,除了具备 `BeanFactory` 的所有功能外,还提供了更多的企业级特性,例如国际化支持(i18n)、事件传播机制和 AOP 支持等[^2]。 #### 2. 初始化性能 `BeanFactory` 在启动时采用延迟加载的策略,只有在需要使用某个 Bean 时才会对其进行实例化。这种方式可以减少内存占用和初始化时间,适合资源受限的环境[^5]。而 `ApplicationContext` 在启动时会预加载所有的单例 Bean,这可能会增加启动时间,但能够提前发现配置错误并提升运行时性能[^4]。 #### 3. 适用场景 - **`BeanFactory`**:适用于对性能要求极高且资源受限的场景,例如嵌入式设备或小型应用中。由于其轻量级的特点,`BeanFactory` 是这些场景的理想选择[^3]。 - **`ApplicationContext`**:几乎适用于所有企业级应用场景。它不仅提供了丰富的功能,还简化了开发过程,使得开发者能够更专注于业务逻辑而非框架细节。 #### 4. 示例代码 以下是一个简单的代码示例,展示如何使用 `BeanFactory` 和 `ApplicationContext`: ```java // 使用 BeanFactory DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); reader.loadBeanDefinitions("applicationContext.xml"); MyService myService = beanFactory.getBean(MyService.class); myService.execute(); // 使用 ApplicationContext AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); MyService myServiceFromContext = context.getBean(MyService.class); myServiceFromContext.execute(); ``` #### 5. 特性对比表 | 特性 | BeanFactory | ApplicationContext | |---------------------|-------------------------------------|------------------------------------------| | 基础功能 | 提供 IoC 容器的基本功能 | 包含 BeanFactory 的所有功能 | | 国际化支持 | 不支持 | 支持 | | 事件监听机制 | 不支持 | 支持事件发布与监听 | | 资源加载 | 需要手动实现 | 内置资源加载功能 | | 启动性能 | 启动快,按需加载 | 启动较慢,预加载所有单例 Bean | --- ###
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值