码迷,mamicode.com
首页 > 其他好文 > 详细

[05] Bean的作用域和生命周期

时间:2018-04-18 23:39:33      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:回收   效果   oba   add   sys   java   配置文件   class   无法   


1、Bean的作用域和初始化时间

之前我们稍微提到过,Spring中管理的Bean,默认都是单例模式,这意味着你多次获取某个对象,得到的都是相同的对象。单例作用域的显性写法如下,这和你不写scope属性的效果是一样的:
  1. <bean id="coder" class="dulk.learn.spring.Coder" scope="singleton" lazy-init="true"></bean>

既然说到了单例模式,还有scope属性,那么显而易见,也就还有其他的作用域:
类别    说明    
singleton    在Spring IOC 容器中仅存在一个Bean实例,Bean以单例的形式存在
prototype每次从容器中调用Bean时,都返回新的实例,即每次调用getBean()时,相当于执行new XxxBean()的操作
request    每次HTTP请求都会创建一个新的Bean
(该作用域仅适用于WebApplicationContext环境)    
session    同一个HTTP Session共享一个Bean,不同HTTP Session使用不同的Bean
该作用域仅适用于WebApplicationContext环境
globalSession同一个全局Session共享一个Bean,一般用于Portlet应用环境
该作用域仅适用于WebApplicationContext环境

插个题外话,看到这里应该能联想到了,我们常用的SSH三大框架组合,其中Struts的Action交给Spring作Bean管理,那么Action是哪种模式呢?默认是单例,意味着数据共享,这在多请求访问时显然是不合时宜的,所以常常配置的还是prototype。

而对于Bean的初始化,那么涉及到另一个属性,叫做“lazy-init”(懒加载),该标签在scope=singleton时影响Bean的实例化时间
  • true:当第一次获取对象实例时创建对象
  • false:当容器加载时就创建对象
  • 默认default相当于false

2、Bean初始化和销毁方法

Spring在创建Bean实例后,会调用Bean配置的初始化方法。而在Spring容器关闭后,Bean不被容器调用,进入可垃圾回收阶段,那么在容器关闭之前,会调用Bean配置的销毁方法(只有scope=singleton的Bean才会执行销毁方法,如果是prototype,对象实例化后已经脱离了Spring的管理转交给调用者,Spring无法获取也就无谈销毁了)

在配置文件里,使用“init-method”和“destroy-method”属性,属性值为Bean的方法名称,如下:
  1. <bean id="Coder" init-method="init" destroy-method="destroy" class="dulk.learn.spring.Coder"></bean>
  1. public class Coder {
  2. ...
  3. public void init() {
  4. System.out.println("Coder init");
  5. }
  6. public void destroy() {
  7. System.out.println("Coder destory");
  8. }
  9. }
  1. public static void main(String[] args) {
  2. ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("/applicationContext.xml");
  3. Coder coder = (Coder) ac.getBean("coder");
  4. ac.close();
  5. }
技术分享图片
 


[05] Bean的作用域和生命周期

标签:回收   效果   oba   add   sys   java   配置文件   class   无法   

原文地址:https://www.cnblogs.com/deng-cc/p/8877953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!