当前位置:首页 > 资讯 > info5 > 正文

【spring框架】bean的生命周期

发表于: 2015-02-15   作者:u013517797   来源:转载   浏览次数:
摘要: 生命周期:a)lazy-init(不重要)指的是在容器进行初始化的时候它不进行初始化ApplicationContext实现的默认行为就是在启动时将所有singletonbean提前进行实例化。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singletonbean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花
生命周期:
a)lazy-init(不重要)
指的是在容器进行初始化的时候它不进行初始化

ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。

有时候这种默认处理可能并不是你想要的。如果你不想让一个singleton bean在ApplicationContext初始化时被提前实例化,那么可以将bean设置为延迟实例化。一个延迟初始化bean将告诉IoC 容器是在启动时还是在第一次被用到时实例化。

在XML配置文件中,延迟初始化将通过<bean/>元素中的lazy-init属性来进行控制。例如:
<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/>
<bean name="not.lazy" class="com.foo.AnotherBean"/>

只有在你的应用频繁启动,而且每次启动的时候特别慢,就可以用这个。


b)init-method destroy-methd 不要和 prototype一起用(了解)
我们在UserService方法中添加init与destory方法:
package cn.edu.hpu.service;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.dao.Impl.UserDaoImpl;
import cn.edu.hpu.model.User;


public class UserService {


	private UserDao userDao;
	
	public void init(){
		System.out.println("init");
	}
	
	public UserDao getUserDao() {
		return userDao;
	}


	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}


	public void add(User u){
		this.userDao.save(u);
	}
	
	public void destroy(){
		System.out.println("destroy");
	}
	
}

在beans.xml中配置:
<?xml version="1.0" encoding="UTF-8"?>
<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">


  <bean id="u" class="cn.edu.hpu.dao.Impl.UserDaoImpl">
     <property name="daoId" value="1"></property>
  </bean>
	
  <bean id="userService" class="cn.edu.hpu.service.UserService" init-method="init" destroy-method="destroy">
  	 <property name="userDao" ref="u"></property>
  </bean>
  
</beans>
一旦我们的容器对这个bean进行初始化的时候会首先调用init-method属性指定的方法,容器关闭的时候会调用destroy-method属性指定的方法。


测试:
package cn.edu.hpu.service;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import cn.edu.hpu.dao.UserDao;
import cn.edu.hpu.model.User;


public class UserServiceTest {
	
	@Test
	public void testAdd() throws Exception{
		ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
		
		UserService userService=(UserService)ctx.getBean("userService");
		ctx.destroy();
	}
}
测试结果:
init
destroy
发现调用了初始化方法和结束方法。

注意:不要和scope="prototype" 一起用,会影响。具体为什么现在不必考虑。

转载请注明出处:http://blog.csdn.net/acmman

【spring框架】bean的生命周期

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
上下文ApplicationContext容器中的生命周期: bean: package com.pas.service; //引包 public clas
1.当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.bean
Spring Bean 生命周期 任何一个事物都有自己的生命周期,生命的开始、生命中、生命结束。大家最熟悉
1:实例化: 容器寻找Bean的定义信息并将其实例化。 2:设置属性:使用依赖注入,Spring按照Bean定
在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的
概要: IOC容器中Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期
  ApplicationContext启动之后会实例化所有的bean定义,这个特性在本书中已经多次提到。但Applica
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Sing
在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的
Spring中Bean的生命周期过程: 1.Spring对Bean进行实例化(相当于程序中的new Xx()) 2.Spring将值
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号