海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java框架教程之spring的bean作用域

未分类
2020-12-10 15:24:52
1822677238@qq.com

手机扫码查看

2020java框架教程之spring的bean作用域

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″/>

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注