Spring 入门教程(二) 生命周期和作用域


下面的知识点是针对使用配置文件讲的(annotation对应标签后面文章会详细阐述)


Bean的生命周期:

 

为什么关心这个问题?

我们使用IOC的目的就是为了让Spring IOC帮我们管理对象,从而不需要去自己手动去new ,何时new,怎么管理对象间依赖,什么时候销毁等等很多问题。而对象在Spring容器看来就是一个个bean,理所当然要理解Bean的生命周期。

 

生命周期的过程有哪些?

定义、初始化、使用、销毁。


初始化:(1)实现org.springframework.beans.factory.InitlialzingBean接口,并覆盖其中的afterPropertiesSet方法;

       ( 2)配置init-method;

销毁:(1)实现org.springframework.beans.factory.DisposableBean接口,并覆盖destory方法;

                   (2)配置destroy-method;

 

当然也可以使用配置默认方式(看下面Spirng相应配置文件):

default-init-method="defautInit"   default-destroy-method="defaultDestroy


import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

//实际应用中,需要特别注意的是,下面三种初始化和销毁的方法只需要选用一种即可,继承接口的那种不需要再配置文件中声明,而其他两种则需要在配置文件中声明

//这里是实现了相应的接口,但是注意要覆盖对应的方法
public class BeanLifeCycle implements InitializingBean, DisposableBean {
	
	
	// default-init-method="defautInit" default-destroy-method="defaultDestroy" 配置文件中的默认构造方法
	public void defautInit() {
		System.out.println("Bean defautInit.");
	}
	
	// default-init-method="defautInit" default-destroy-method="defaultDestroy" 配置文件中的默认构造方法
	public void defaultDestroy() {
		System.out.println("Bean defaultDestroy.");
	}

	@Override    
	//覆盖接口要求的方法
	public void destroy() throws Exception {
		System.out.println("Bean destroy.");
	}

	@Override
	//覆盖接口要求的方法
	public void afterPropertiesSet() throws Exception {
		System.out.println("Bean afterPropertiesSet.");
	}
	
	//另一种方法,在配置文件中规定的 init-method="start" destroy-method="stop"  对应类中声明相应方法
	public void start() {
		System.out.println("Bean start .");
	}
	
	//另一种方法,在配置文件中规定的 init-method="start" destroy-method="stop"  对应类中声明相应方法
	public void stop() {
		System.out.println("Bean stop.");
	}
	
}



这里需要注意几个关系(1)不管是使用默认的初始化和销毁方法,还是继承接口,或者在配置文件中声明,都需要在对应的类中写上相应的方法。当然,针对更一般的类使用默认设置有灵活性,可以在不同文件中只要改写相应的方法即可,而不要每次都配置,或者都去实现接口。(2)如果我们三种方法同时使用,那么, default-init-method="defautInit"default-destroy-method="defaultDestroy"不起作用。(3)在具体的类中可以不实现默认的具体的方法(只是不报错,但是不起初始化、销毁作用),但是,如果是继承接口或自己配置,那么在具体类中一定要实现相应方法;




Bean的作用域:

 

为什么关心这个问题?

同上面生命周期一样,我们必须要关心,Bean在哪些地方能用,不同的http请求来时创建的是不是同一个Bean等问题,而这些直接跟我们开发相关。

 

Bean的作用域几种类型:

single:单例,一个Bean容器只存在一份;

prototype:每次请求都创建新的实例;

request:每次http请求时创建一个实例,并仅在当前的request内生效;

session:每次http请求时创建一个实例,并仅在当前的session内生效;


<?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.xsd" >
        
        <!-- 一个web项目可以有非常多的spring配置文件,但是这些文件得自己在需要加载对象的时候读取配置文件 
             scope="singleton,注意这边配置-->
        <bean id="beanScope" class="com.xidian.BeanScope" scope="singleton"></bean>
 </beans>


很明显,不同的scope配置,相应的使用效果肯定不同,这要视具体开发要求而定。



你看会了吗?欢迎讨论 http://blog.csdn.net/code_7/



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值