作用域
scope属性:
- singleton 一个bean只创建、共用一个实例(默认)
- prototype 一个bean创建多个实例
<!--
scope属性:用来配置作用域:
1:singleton 一个bean只创建、共用一个实例(默认)
2. prototype 一个bean创建多个实例
-->
<bean id="s1" class="scope.ScopeBean"
scope="prototype"/>
package test;
import org.junit.Test;//导入junit
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import scope.ScopeBean;
public class TestCase {
@Test
//启动spring容器
public void test1() {
ApplicationContext ac=
new ClassPathXmlApplicationContext(
"scope.xml");
ScopeBean s1=
ac.getBean("s1", ScopeBean.class);
ScopeBean s2=
ac.getBean("s1", ScopeBean.class);
System.out.println(s2==s1);
}
}
生命周期
- 初始化
init-method属性:指定初始化方法。 - 销毁
destroy-method属性:在关闭容器时,启动指定方法 - 注意:
想要调用close方法,需要把容器类型转换成AbstractApplicationContext
<bean id="mb1" class="scope.MessageBean"
init-method="init"
destroy-method="destroy"/>
public class MessageBean {
public MessageBean() {
System.out.println("MessageBean()");
}
public void init() {
System.out.println("init()");
}
public void send() {
System.out.println("send()");
}
private void destroy() {
System.out.println("destroy()");
}
}
//启动容器
AbstractApplicationContext ac=
new ClassPathXmlApplicationContext("scope.xml");
System.out.println(ac);
//创建对象.自动调用init方法
MessageBean mBean=ac.getBean("mb1", MessageBean.class);
mBean.send();
/**
* 关闭容器
* 注意:
* 想要调用close方法,需要把容器类型转换成AbstractApplicationContext
*关闭容器时会自动调用销毁方法
*/
ac.close();
延迟加载
#默认情况下,spring容器启动后,会自动将所有作用域为单例的bean创建好。
lazy-init属性:
- 当把该属性设置为true后,只有在需要时才创建bean对象·。
- 注意:只对作用域为单例的bean有作用
day03