SpringBoot Bean类型
SpringBoot Bean类型
按作用域分
根据作用域的不同,Bean可以分为以下六种类型
-
Singleton(单例模式):Spring容器中只会创建一个Bean实例,所有对该Bean的请求均返回同一个实例。这是默认的作用域。
@Configuration public class MyConfig{ @Bean @Scope("singleton") public Bill getBillBean(){ return new Bill(); } } // 或者 @Component @Scope("singleton") public class Bill(){ //... }
ℹ️ singleton字符串也可使用
ConfigurableBeanFactory.SCOPE_SINGLETON
替代 -
Prototype(原型模式):每次请求该Bean时,都会创建一个新的Bean实例。因此,该Bean的生命周期和请求周期相同。
@Configuration public class MyConfig{ @Bean @Scope("prototype") public Bill getBillBean(){ return new Bill(); } } // 或者 @Component @Scope("prototype") public class Bill(){ //... }
ℹ️ prototype字符串也可使用
ConfigurableBeanFactory.SCOPE_PROTOTYPE
替代 -
Request:每个HTTP请求均会创建一个新的Request Bean实例,该Bean的生命周期将与HTTP请求的生命周期相同。仅在Web应用程序上下文中才有意义。Controller处理一个HTTP请求时,任何标记为
@Scope("request")
的Bean(即Request作用域的Bean)都将在整个请求的生命周期内可用。这意味着从请求开始到请求结束,包括在Controller内部处理逻辑、调用Service层、Repository层等过程中,Request作用域的Bean将保持一致,可以被自由地使用。@Component @Scope("request") public class AppRequestBean { // ... } // 或者 @Configuration public class WebConfig { @Bean @Scope("request") public AppRequestBean appRequestBean() { return new AppRequestBean(); } }
⚠️注意点
- Request作用域的Bean实例在请求结束时被销毁
- Request bean是线程安全的
-
Session:每个HTTP Session都会创建一个新的Bean实例,该Bean的生命周期将与HTTP Session的生命周期相同,注意哈!并不是session。仅在Web应用程序上下文中才有意义。
@Component @Scope("session") public class AppSessionBean { // ... } // 或者 @Configuration public class WebConfig { @Bean @Scope("session") public AppSessionBean appSessionBean() { return new AppSessionBean(); } }
-
Global Session:该作用域仅适用于基于Portlet的Web应用程序,它表示Portlet应用程序的全局Session范围内创建Bean实例。
-
Application:Spring 4.2引入的Scope,类似于Singleton,作用域对象是ServletContext,不是Spring容器。
按性质分
Spring中的Bean可以分为以下两种类型
- 普通Bean:在配置文件中定义的Bean类型就是返回类型。这是最常见的Bean类型,直接对应到Java中的一个类或接口的实现。
- Factory Bean:实现了FactoryBean接口的Bean。Factory Bean的返回对象不指定类的一个实例,而是生产其他Bean
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18323991
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现