Spring03_Bean的作用域、生命周期以及延迟实例化
作者:互联网
1 Bean的作用域
Spring容器在实例化Bean时,可以创建以下作用域的Bean对象
作用域 | 描述 |
---|---|
singleton | 一个Bean定义对应一个对象实例,为默认项 |
prototype | 一个Bean定义对应多个对象实例 |
request | 在一次HTTP请求中,一个Bean定义对应一个实例,仅限web环境 |
session | 在一个HTTP session中,一个Bean定义对应一个实例,仅限web环境 |
上面的作用域,可以通过scope属性指定
测试代码
运行结果
修改声明
运行结果
2 Bean的生命周期以及延迟实例化
spring容器在创建Bean时,可以帮忙管理Bean的生命周期,即管理Bean的初始化及销毁的方法。
默认情况下,创建spring容器时,会创建单例的对象,也可以让Spring容器延迟实例化这些单例的对象
创建一个类
package bean;
import java.io.Serializable;
public class ExampleBean implements Serializable{
public ExampleBean() {
System.out.println("实例化ExampleBean:" + this);
}
public void init() {
System.out.println("初始化ExampleBean");
}
public void destroy() {
System.out.println("销毁ExampleBean");
}
public void execute() {
System.out.println("执行execute方法");
}
}
然后在applicationContext.xml中声明这个Bean
<!-- bean的生命周期 -->
<!-- bean的延迟实例化 -->
<bean id="exampleBean" class="bean.ExampleBean"
init-method="init" destroy-method="destroy"/>
测试代码
/**
*1.bean的生命周期
*2.bean的延迟实例化
*/
@Test
public void test(){
String conf = "applicationContext.xml";
AbstractApplicationContext ac =
new ClassPathXmlApplicationContext(conf);
System.out.println("----------------");
ExampleBean bean = ac.getBean("exampleBean",ExampleBean.class);
bean.execute();
ac.close();
}
运行结果
我们发现,在Spring容器创建的时候,接着就将Bean实例化了,那么如何可以实现在调用的时候再实例化呢,我们修改一下申明的Bean
<!-- bean的生命周期 -->
<!-- bean的延迟实例化 -->
<bean id="exampleBean" class="bean.ExampleBean"
init-method="init" destroy-method="destroy" lazy-init="true"/>
再看一下运行结果
这样就实现了延迟实例化
在顶级的beans元素中的default-lazy-init属性,可以为容器所有bean指定延迟实例化特性,适用于使用频率很低的单例对象
标签:ExampleBean,作用域,Spring03,bean,Bean,实例,public 来源: https://blog.csdn.net/weixin_41538424/article/details/88813207