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
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》