限定程序中变量的可用范围叫做作用域,Bean对象的作用域是指Bean对象在Spring整个框架中的某种行为模式~~
Bean对象的六种作用域:
-
singleton:单例作用域(默认)
-
prototype:原型作用域(多例作用域)
-
request:请求作用域(Spring MVC独有)
-
session:会话作用域(Spring MVC独有)
-
application:全局作用域(Spring MVC独有)
-
websocket:HTTP WebSocket 作用域(我们这里不考虑)
singleton说明:该作用域下的Bean只存在一个实例(对象),获取Bean及注入Bean(装配Bean)都是同一个对象,它是默认的~~
prototype说明:该作用域下的Bean存在多个实例(对象),每获取一次Bean及注入一次Bean(装配一次Bean)就会创建出一个新的对象~~
request说明:每次http请求会创建一个新的Bean实例,限定SpringMVC中使用~~
session说明:每一个http session都会创建一个新的Bean实例,限定SpringMVC中使用~~
application说明:每一个应用创建一个新的Bean实例,限定SpringMVC中使用~~
设置Bean对象的作用域:
使用@Scope注解就可以设置Bean对象的作用域,它既可以修饰方法也可以修饰类,有两种设置方式:
-
直接设置:@Scope("xxx"),"xxx"就是对应作用域的英文单词
-
使用全局变量设置:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE/...)
@Component
public class Users {
@Bean(name = "user1")
@Scope("prototype")
public User user1() {
User user = new User();
user.setId(1);
user.setName("Java");
return user;
}
}
@Component
public class Users {
@Bean(name = "user1")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public User user1() {
User user = new User();
user.setId(1);
user.setName("Java");
return user;
}
}