spring内部创建对象的方式(或bean实例化方式)

spring内部创建对象的方式(或bean实例化方式)

方式一:采用默认构造函数创建对象(重点)

 <bean id="helloWorld" class="cn.zzu.spring.bean.HelloWorld"></bean>

 

方式二:采用静态工厂的方式

首先提供一个工厂类

public class HelloWorldFactory {
	/**
	 * 静态方法
	 *   	创建HelloWorld对象
	 * @return
	 */
	public static HelloWorld getInstance(){
		return new HelloWorld();
	}
}

配置静态工厂方法即把其放入spring容器

<bean id="helloWorld2" class="cn.zzu.spring.bean.HelloWorldFactory" factory-method="getInstance"></bean>


第三种方式:采用实例工厂方式

创建一个类对象如下

public class HelloWorld2Factory {
	public HelloWorld getInstance(){
		return new HelloWorld();
	}
}

配置文件的写法

<bean id="helloWorldFactory" class="cn.zzu.spring.bean.HelloWorld2Factory"></bean>
	<!-- 
		利用实例工厂模式创建对象
			factory-bean
				指向某一个工厂
			factory-method
				工厂方法
	 -->
	<bean id="helloWorld3" factory-bean="helloWorldFactory" factory-method="getInstance"></bean>

 

spring容器创建对象的时机

1、在默认的情况下(lazy-init='default/false'),在spring容器初始化的时候创建对象
2、lazy-init为true的情况
      当客户端调用context.getBean的方式时创建对象
3、说明:
       1、lazy-init为default/false的情况,可以过早的发现错误,过早的进行修改
        lazy-init为true,不能过早发现错误
       2、如果一个bean中存放过大的数据,我们不希望该数据过早的加入到内存中,希望的情况是什么时候用什么时候加载
            这个时候用lazy-init为true比较好

Bean的作用域

企业开发时:最常用 singleton prototype

SingletonBean在容器初始化时,就构造

PrototypeBean在使用Bean (getBean) 才去构造

1、默认情况下,spring容器中的bean是单例模式(singleton)
2、prototype 原型模式   多实例
3、如果一个bean的scope为"prototype",那么lazy-init无论为什么值,都是getBean时才要创建对象
4、struts2的action是多实例,所以如果把action放入到spring容器中,action在spring容器中的配置必须是
    scope="prototype"

Bean的初始化与销毁

spring容器的init和detroy
在spring的配置文件中
 

<bean id="helloWorld" class="cn.itcast.spring1107.initdestroy.bean.HelloWorld"
    	init-method="init" destroy-method="destroy"></bean>

执行顺序:
1、启动spring容器
2、采用默认的构造函数创建对象
3、执行init-method指向的方法
     该方法是由spring容器来调用的,并且是在执行完构造函数之后立刻调用的
4、对象调用方法
5、执行destroy-method方法
注:不管是初始化方法还是销毁方法,实际上都是由spring容器内部执行的,但是销毁方式的前提条件:
       1、spring容器关闭
       2、必须是单例的

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值