一.实例化bean 的三种方式:
1.使用类构造器实例化:
<bean name=“xxx" class="xx.xx.xxxBean"/>
这种方式不做多提,用的最多,最方便。
2.使用静态工厂方法实例化:
<!--//静态工厂方法实例化-->
<bean name="iSpring_3" class="com.zyy.service.impl.ISpring_3BeanFactory"
factory-method="createISpring_3Bean"></bean>
package com.zyy.service;
/**
* Created by CaMnter on 2014/8/27.
*/
public interface ISpring_3 {
public void message();
}
package com.zyy.service.impl;
import com.zyy.service.ISpring_3;
/**
* Created by CaMnter on 2014/8/27.
*/
public class ISpring_3Bean implements ISpring_3 {
public void message() {
System.out.println("***** 使用静态工厂方法实例化 *****");
}
}
package com.zyy.service.impl;
import com.zyy.service.ISpring_3;
/**
* Created by CaMnter on 2014/8/20.
*/
public class ISpring_3BeanFactory {
//静态工厂方法实例化
public static ISpring_3 createISpring_3Bean() {
return new ISpring_3Bean();
}
}
@Test
public void test_1() throws Exception {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
ISpring_3 iSpring_3 = (ISpring_3) applicationContext.getBean("iSpring_3");
iSpring_3.message();
}
3.使用实例工厂方法实例化:
<!--//实例化工厂方法实例化-->
<bean name="iSpring_4BeanFactory" class="com.zyy.service.impl.ISpring_4BeanFactory"></bean>
<bean name="iSpring_4" factory-bean="iSpring_4BeanFactory" factory-method="createISpring_4Bean"></bean>
package com.zyy.service;
/**
* Created by CaMnter on 2014/8/27.
*/
public interface ISpring_4 {
public void message();
}
package com.zyy.service.impl;
import com.zyy.service.ISpring_4;
/**
* Created by CaMnter on 2014/8/27.
*/
public class ISpring_4Bean implements ISpring_4 {
public void message() {
System.out.println("***** 使用实例工厂方法实例化 *****");
}
}
package com.zyy.service.impl;
import com.zyy.service.ISpring_4;
/**
* Created by CaMnter on 2014/8/20.
*/
public class ISpring_4BeanFactory {
//使用实例工厂方法实例化
public ISpring_4 createISpring_4Bean() {
return new ISpring_4Bean();
}
}
@Test
public void test_2() throws Exception {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
ISpring_4 iSpring_4 = (ISpring_4) applicationContext.getBean("iSpring_4");
iSpring_4.message();
}
二.Bean的作用域
通过设置bean节点下的scope的值:
.singleton
在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动
时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,
这时候,只有第一次获取bean会才初始化bean。如:
<bean name="xxx" class="xx.xx.xxxBean" lazy-init="true"/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“
如下:
<beans default-lazy-init="true“...>
.prototype
每次从容器获取bean都是新的对象。
.request
.session
.globalsession
但是不建议设置lazy-init的值为true,因为这样只有才调试的时候才知道bean初始化是否
有问题,后造成后期的麻烦,日过在实例化Spring容器的时候就实例化bean,可以早点发现
问题。
bean的初始化,可以是Spring容器实例的同时初始化,可以是设置lazy后,通过采用
getBean后才能初始化。
但是,bean 的销毁,是在Spring 容器关闭时,就被销毁了。
我们可以:
指定Bean的初始化方法和销毁方法
<bean name="xxx" class="xx.xx.xxxBean" init-method="init"destroy-method="close"/>
这就要求需要在bean中定义一个 init()方法 和 close()方法。当bean创建或销毁时
容器分别自动调用方法。