【spring框架】bean的生命周期

生命周期:
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

时间: 2024-09-28 16:32:58

【spring框架】bean的生命周期的相关文章

spring入门(4) spring中Bean的生命周期总结

Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在 ApplicationContext和BeanFactory中Bean的生命周期. 1.在ApplicationContext中Bean的生命周期 生命周 期执行的过程如下: 1.需找所有的bean根据bean定义的信息来实例化bean 2.使用依赖注入,spring按bean 定义信息配置bean的所有属性 3.若bean实现了BeanNameAware接口,工

spring之Bean的生命周期

Bean的生命周期: Bean的定义--Bean的初始化--Bean的使用--Bean的销毁 Bean的定义 Bean 是 Spring 装配的组件模型,一切实体类都可以配置成一个 Bean ,进而就可以在任何其他的 Bean 中使用,一个 Bean 也可以不是指定的实体类,这就是抽象 Bean . Bean的初始化 Spring中bean的初始化回调有两种方法 一种是在配置文件中声明init-method="init",然后在一个实体类中用init()方法来初始化 另一种是实现Ini

j2ee-Spring ApplicationContext Bean的生命周期是怎么样的?

问题描述 Spring ApplicationContext Bean的生命周期是怎么样的? spring 3.x企业应用开发实践一书中写道: ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean:而ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean. 但是在介绍ApplicationContext Bean的生命周期时,配

Spring Bean的生命周期详细介绍_java

Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring容器.这里,我们讲的也是 ApplicationContext中Bean的生命周期.而实际上BeanFactory也是差不多的,只不过处理器需要手动注册. 一.生命周期流程图: Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关

Spring Bean的生命周期管理

本文来自阅读Life Cycle Management of a Spring Bean这篇文章所做的笔记和实验. 按图索骥 bean的生命周期 知识点 1. BeanNameAware接口 Spring Bean存活于容器之中,一般情况下spring bean对context的情况并不了解,如果希望某个bean知道自己在context中的代号:bean name,即可让该bean的类型实现BeanNameAware接口. package org.test.spittr.spi; import

Bean的生命周期

原文:Bean的生命周期 1.实现各种生命周期控制访问的NewCar package com.beanprocess; import org.springframework.beans.BeansException; import org.springframework.beans.factory.*; /** * Created by gao on 16-3-18. */ public class NewCar implements BeanFactoryAware,BeanNameAware

thinkPHP5.0框架应用请求生命周期分析

本文实例讲述了thinkPHP5.0框架应用请求生命周期.分享给大家供大家参考,具体如下: 本篇内容我们对ThinkPHP5.0的应用请求的生命周期做大致的介绍,以便于开发者了解整个执行流程. 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件.当然,你也可以更改或者增加新的入口文件. 通常入口文件的代码都比较简单,一个普通的入口文件代码如下: // 应用入口文件 // 定义项目路径 define('APP_PATH', __DIR__ . '/..

关于Stateful Session Bean的生命周期问题

问题描述 在Glassfish的EJB容器设置中,EJBCache的一个选项CacheResizeQuantity:缓存中的Bean达到最大数目后,被容器从备份存储中删除的钝化Bean的数目.为什么缓存中Bean达到最大数目后要从备份存储中删除钝化Bean呢?这对解决缓存无法增加Bean实例有什么作用呢?而且还有一个选项是RemovalSelectionPolicy:从缓存中删除有状态Bean依据的策略.这一项应该是和上一项结合使用的吧,那么既然是从缓存中删除有状态Bean,就应该是缓存中的Be

【Spring】Spring常用配置-Bean的初始化和销毁(生命周期)

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 分析 在我们实际开发的时候,经常会遇到在Bean使用之前或者之后做些必要的操作,Spring对Bean的生命周期的操作提供了支持. 有如下2种方式: 1.Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destroy-method) 2.注解方式: 利用JSR-250的@PostConstruct和@Pr