您的位置:首页 > 编程语言 > Java开发

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

2014-01-15 00:13 435 查看
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、必须是单例的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: