一、@Scope 注解
@Scope
:使用 @Scope
来调整组件的作用域
ConfigurableBeanFactory#SCOPE_PROTOTYPE prototype
ConfigurableBeanFactory#SCOPE_SINGLETON singleton
org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST request
org.springframework.web.context.WebApplicationContext#SCOPE_SESSION session
prototype:多实例的 IOC 容器启动并不会调用方法创建对象放在容器中,每次获取的时候才会调用方法创建对象
singleton:单实例的(默认值)ioc 容器中会调用方法创建对象放到 ioc 容器中,以后每次获取就是直接从容器中拿
request:同一次请求创建一个实例
session:同一个 session 创建一个实例
二、@Scope 调整组件作用域
创建一个配置类,在里面注册一个 Person 对象:
@Configuration
public class MainConfig2 {
@Bean(value = "person")
public Person person() {
System.out.println("给容器中添加 Person 对象。。。");
return new Person("王五", 20);
}
}
该组件在 IOC 容器中默认都是单例的:
@Test
public void test02() {
ApplicationContext ioc = new AnnotationConfigApplicationContext(MainConfig2.class);
System.out.println("IOC容器创建完成");
Person bean = (Person) ioc.getBean("person");
Person bean2 = (Person) ioc.getBean("person");
System.out.println(bean == bean2); //true
}
在 Spring 的 IOC 容器中,默认的 Bean 都是单例的,可以设置 @Scope 注解来进行修改。
@Configuration
public class MainConfig2 {
/*
使用 @Scope 来调整组件的作用域
ConfigurableBeanFactory#SCOPE_PROTOTYPE prototype
ConfigurableBeanFactory#SCOPE_SINGLETON singleton
org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST request
org.springframework.web.context.WebApplicationContext#SCOPE_SESSION session
prototype:多实例的
IOC 容器启动并不会调用方法创建对象放在容器中,每次获取的时候才会调用方法创建对象
singleton:单实例的(默认值)
ioc 容器中会调用方法创建对象放到 ioc 容器中,以后每次获取就是直接从容器中拿
request:同一次请求创建一个实例
session:同一个 session 创建一个实例
*/
//默认是单实例的
@Scope("prototype")
@Bean(value = "person")
public Person person() {
System.out.println("给容器中添加 Person 对象。。。");
return new Person("王五", 20);
}
}
其实 @Scope
注解 等价于 bean 标签中的 scope 属性:
分类:
Spring注解驱动
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战