Bean 的作用域分类
singleton
单例模式(默认):在每个Spring IOC 容器中,一个Bean 定义对应一个对象实例。
prototype
一个Bean 定义对应多个对象实例。
request
在一次http请求中,一个bean定义对应一个实例,即每次http 请求会有各自的bean实例,
它们依据某个bean 定义创建而成,该作用域仅基于web的Spring ApplicationContext的情况下有效。
session
在一个Http Session中,一个bean定义对应一个实例。该作用域仅基于web的Spring ApplicationContext的情况下有效。
global session
在全局的Http Session 中,一个bean定义对应一个实例。该作用域仅基于portlet context 的
时候有效,该作用域仅基于web的SpringApplicationContext 的情况下有效。
Bean 的执行时机
singleton 的执行时机
容器初始化时,就会创建对象,以后再getBean()
时不再创建新对象。singleton 也支持延迟加载,在第一次使用时产生。使用 @Lazy 在注解了@Bean的方法上注解,便可以开启延迟加载。使用示例:
@Bean(value = "stu",initMethod = "myInit",destroyMethod = "myDestroy")
@Scope(scopeName="singleton")
@Lazy
public Student student() {
return new Student();
}
prototype 的执行时机
容器在初始化时,不会创建对象,只是在每次使用时创建对象,并且每次getBean()
都会创建一个新的对象。
如何设置Bean的作用域
xml 方式
<bean id="xxx" class="xxx" scope="prototype"/>
注解方式
@Scope(value="prototype")