手机扫码查看
2020java框架教程之spring的bean作用域
Scope作用域
单例 singleton:
在整个应用程序中,只创建bean的一个实例
原型 prototype:
每次注入或通过spring上下文获取的时候,都会创建一个新的bean实例
会话 session:
在web应用程序中,为每个会话创建一个bean实例
请求request:
在web应用程序中,为每个请求创建一个bean实例
单例和多例
1.默认情况下bean是单例的,scope=”singleton’;
2.多例配置:scope=”prototype”;
3.scope=”request”;
4.scope=”session”;
<!-- singleton是单例 获取的对象都是同一个地址 --> <bean name="users2" class="entity.Users" scope="singleton"></bean> <!-- prototype 是 多例 每次构建对象都 new一个新的地址 --> <bean name="users2" class="entity.Users" scope="prototype"></bean>
bean创建模式
singleton单例(默认);
在同一个spring工厂中,一个Bean只会创建一个对象。
多次getBean(),或多次注入使用的是同一个对象。
随工厂创建而创建,随工厂关闭而销毁。
prototype:多例(原型)
<bean class="bean.Users" id="users" scope="prototype"/>
每次getBean(),或多次注入都会重新创建对象。
不随工厂创建而创建,不随工厂关闭而销毁
被用到时才会创建对象。
生命周期
单例Bean:构造(工厂启动)–>set–>init–>User–>destory(销毁)
多例Bean:获取时才创建–>set–>init–>User–>不会随工厂关闭而销毁
延迟创建对象(延迟加载)
lazy-init=”true” 延迟创建对象,容器启动时不创建,获取时再创建
lazy-init=”false” 默认值,不延迟创建对象,容器启动时立即创建
<bean name="users2" class="entity.Users" scope="singleton" lazy-init="true"></bean>
注:延迟创建对象只对 单例 有效
init-method="init" destroy-method="destroy
init初始化方法、destroy销毁方法,需要调用destroy()方法或close()方法,然后将ApplicationContext改成AbstractApplicationContext
总结:
作用域配置:
XML配置:
scope=”singleton”
自动装配:
@component
@Scope(“singleton”)
javaConfig配置:
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
延迟加载
XML配置:
lazy-init=”true”
自动装配:
@Component
@Lazy
JavaConfig:
@Bean
@Lazy
初始化方法和销毁方法
XML配置:
destroy-method=”destroy” init-method=”init”
自动装配和JavaConfig
@PostConstrut
public void init(){
System.out.println(“初始化方法”);
}
@PreDestory
public void destory(){
System.out.println(“销毁方法”);
}
工厂方法
静态工厂:
<bean id=”users” class=”dao.Users” factory-method=”crateUsers1″/>
实例工厂:
<bean id=”users2Factory” class=”dao.Users” />
<bean id=”users2″ factory-bean=”users2Factory” factory-method=”crateUsers2″/>



发表回复