Spring Bean作用域

举报
Java李杨勇 发表于 2022/07/31 20:20:34 2022/07/31
【摘要】 默认情况下,所有的 Spring Bean 都是单例的,也就是说在整个 Spring 应用中, Bean 的实例只有一个。Spring 5 共提供了 5种 scope 作用域,1.singleton :bean在每个Spring ioc 容器中只有一个实例。2.prototype:一个bean的定义可以有多个实例。3.request:每次http请求都会创建一个bean,该作用域仅在基于we...

默认情况下,所有的 Spring Bean 都是单例的,也就是说在整个 Spring 应用中, Bean 的实例只有一个。

Spring 5 共提供了 5种 scope 作用域,

1.singleton :bean在每个Spring ioc 容器中只有一个实例。

2.prototype:一个bean的定义可以有多个实例。

3.request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

4.session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

5.global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

singleton

singleton 是 Spring 容器默认的作用域、当 Bean 的作用域为 singleton 时,Spring IoC 容器中只会存在一个共享的 Bean 实例、这个 Bean 实例将存储在高速缓存中,所有对于这个 Bean 的请求和引用,只要 id 与这个 Bean 定义相匹配,都会返回这个缓存中的对象实例。

如果一个 Bean 定义的作用域为 singleton ,那么这个 Bean 就被称为 singleton bean。在 Spring IoC 容器中,singleton bean 是 Bean 的默认创建方式,可以更好地重用对象,节省重复创建对象的开销。

在 Spring 配置文件中,可以使用 <bean> 元素的 scope 属性,将 Bean 的作用域定义成 singleton,其配置方式如下所示:

  1. <bean id="..." class="..." scope="singleton"/>

示例 1
创建一个名为 SingletonBean 的类

public class SingletonBean {
private String str;
public void setStr(String str) {
this.str = str;
}
}


创建 Spring 配置文件 Beans.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="singletonBean" class="net.biancheng.c.SingletonBean" scope="singleton">
<property name="str" value="test单例模式"></property>
</bean>
</beans>


创建一个名为 Main 的类

public class Main {
private static final Log LOGGER = LogFactory.getLog(MainApp.class);
public static void main(String[] args) {
//获取 ApplicationContext 容器
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
SingletonBean singletonBean = context.getBean("singletonBean", SingletonBean.class);
SingletonBean singletonBean2 = context.getBean("singletonBean", SingletonBean.class);
System.out.println(singletonBean);
System.out.println(singletonBean2);
}
}


5. 运行 main() 方法控制台输出如下。

com.tt.SingletonBean@65e2dbf3
com.tt.SingletonBean@65e2dbf3
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。