【Spring】Bean 的作用域

  • Post author:
  • Post category:其他


🎈博客主页:🌈

我的主页

🌈

🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏

🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩

🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠

个人主页





🌟 一、XML 配置

默认情况下,我们注册到 Spring 容器中的 Bean 是单例的,多次获取,拿到的是同一个实例

如果是 XML 配置,可以通过如下方式修改 scope 属性:

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
<bean class="com.dong.Cat" id="cat" scope="prototype"/>
</beans>

主要就是修改 scope 属性的值。

scope 属性的取值,一共有六种

取值 含义 生效条件
singleton 表示这个 Bean 是单例的,在 Spring 容器中,只会存在一个实例
prototype 多例模式,每次从 Spring 容器中获取 Bean 的时候,才会创建 Bean 的实例出来
request 当有一个新的请求到达的时候,会创建一个 Bean 的实例处理 web 环境下生效
session 当有一个新的会话的时候,会创建一个 Bean 的实例出来 web 环境下生效
application 这个表示在项目的整个生命周期中,只有一个 Bean web 环境下生效
gloablsession 有点类似于 application,但是这个是在 portlet 环境下使用的



🌟 二、Java 配置

Java 配置可以通过 @Scope 注解去设置作用域

public class JavaConfig {
	@Bean
	@Scope("prototype")
	Cat cat(){
		Cat cat = new Cat();
		return cat;
	}
}



🌟 三、singleton 和 prototype 的区别

  • 如果 scope 为 singleton,则 Spring 容器在启动的时候,就会完成 Bean 的初始化;而 prototype 则是在每一次获取 Bean 的时候,Spring 容器才会去初始化 Bean
  • 在具体的项目中使用的时候,要注意 scope 为 prototype 的 Bean 要注意销毁



版权声明:本文为m0_46635265原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。