spring学习笔记整理--04(配置Spring管理的bean的作用域、生命周期)

今天的东西非常的简单,看视频也就是几分钟的事,所以在这里描述就更简单了。

一.初始化bean对象

  在每个Spring Ioc容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,单我们可以指定Bean节点的lazy-init="true"来延迟初始化bean,这时候,只有第一次获取bean才会初始化bean。如:

  <bean id="personService" class="cn.service.impl.PersonServiceImpl" lazy-init="true"></bean>

如果想对所有的bean都应用延迟初始化,可以再根节点beans设置default-lazy-init="true",如下:

  <beans xmlns="http://www.springframework.org/schema/beans"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" default-lazy-init="true">

二.每次取新的对象

  让每次取的对象不是同一个对象,而是每次都取新的对象,设置也很简单,如:

  <bean id="personService" class="cn.service.impl.PersonServiceImpl" scope="prototype"></bean>

三.bean的生命周期

  lazy-init="true"和default-lazy-init="true"以及scope="prototype",三个属性都对实例初始化的时机有影响,在这3个属性这样设置时初始化的时间都在getBean也就是获取这个对象时初始化(即访问了bean对象的构造函数)PersonService personService = (PersonService) ctx.getBean("personService");

  否则初始化的时机就是在spring容器初始化的时候

  ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

   其实也很好理解,前面2个属性是设置的延迟加载,跟hibernate差不多取的时候实例化,而第三个属性是让每次取的都是新的对象,所以获取的时候再初始化也符合常理,我是这样记忆的!

 

  说到生命周期,肯定有两个方法不得不提,init()和destroy()。spring容器怎么destroy?如下,很简单:

  AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
   ctx.destroy(); 

  而要调用bean对象的init方法是在初始化方法后调用,destroy方法则是在spring的destroy方法调用后触发。记住,是destroy的spring容器,在spring中设置这两个方法也很简单,如下:

  <bean id="personService" class="cn.service.impl.PersonServiceImpl" scope="prototype" init-method="init" destroy-method="destroy"></bean>

  特别注意:init和destroy这两个值都是bean对象中的实体方法,不是spring的方法,这个名字是可以任意的!

posted on 2011-02-07 14:23  流氓程序员  阅读(376)  评论(0编辑  收藏  举报

导航