
Spring框架支持5种Bean作用域,下面我就分别来详解5大Spring中Bean的作用域@mikechen
1.单例作用域(Singleton)
在整个应用程序中只有一个Bean实例,并由Spring容器创建和管理,默认情况下,所有的Bean都是单例的。
可以通过在@Bean注解中指定@Scope注解的值为”singleton”来显式地指定Bean的作用域为单例作用域。
如下所示:
@Bean
@Scope("singleton")
public MySingletonBean mySingletonBean() {
// bean instantiation and configuration
return new MySingletonBean();
}
2.原型作用域(Prototype)
原型作用域,在每次对Bean执行请求时,都会创建一个新的Bean实例,这意味着每次调用getBean()方法时都会返回一个新的实例。
可以通过在@Bean注解中指定@Scope注解的值为”prototype”来指定Bean的作用域为原型作用域。
@Bean
@Scope("prototype")
public MyPrototypeBean myPrototypeBean() {
// bean instantiation and configuration
return new MyPrototypeBean();
}
3.会话作用域(Session)
在Web应用程序中,为每个会话创建一个Bean实例,同一个会话中的所有请求都共享同一个Bean实例。
可以通过在@Bean注解中指定@Scope注解的值为”session”来指定Bean的作用域为会话作用域。
@Bean
@Scope("session")
public MySessionBean mySessionBean() {
// bean instantiation and configuration
return new MySessionBean();
}
4.请求作用域(Request)
在Web应用程序中,为每个请求创建一个Bean实例,同一个请求中的所有Bean引用都共享同一个Bean实例。
可以通过在@Bean注解中指定@Scope注解的值为”request”来指定Bean的作用域为请求作用域。
@Bean
@Scope("request")
public MyRequestBean myRequestBean() {
// bean instantiation and configuration
return new MyRequestBean();
}
5.全局会话作用域(GlobalSession)
在基于Portlet的Web应用程序中使用,为每个全局会话创建一个Bean实例。
可以通过在@Bean注解中指定@Scope注解的值为”globalSession”来指定Bean的作用域为全局会话作用域。
@Bean
@Scope("globalSession")
public MyGlobalSessionBean myGlobalSessionBean() {
// bean instantiation and configuration
return new MyGlobalSessionBean();
}
以上就是Spring中Bean的作用域详解,更多Spring请查看:Spring教程(史上最全图文详解)
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。