分类
Bean对象的作用域分成六大类:
- singleton:单例作⽤域
- prototype:原型作⽤域(多例作⽤域)
- request:请求作⽤域
- session:回话作⽤域
- application:全局作⽤域
- websocket:HTTP WebSocket 作⽤域
singleton-单例作用域
描述:
该作用域下的Bean对象在IOC容器下只存在一个实例,哪一个类对其的获取与装配都是对同一个Bean对象操作.
使用场景:
无状态的Bean对象通常使用songleton作为作用域,无状态即表示Bean对象不进行数据的修改.
备注:
是spring中Bean对象的默认作用域.
prototype-多例作用域
描述:
该作用域下的Bean对象在IOC容器下会在每次请求时定义新的实例对象.
使用场景:
有状态的Bean对象使用,即属性需要更新
request-请求作用域
描述:
每次http请求都会定义新的实例对象
使用场景:
一次http请求和响应中共享的Bean对象
session-会话作用域
描述:
在一个http的session中定义一个实例对象
使用场景:
用户会话的共享Bean对象,在记录用户信息的时候可以使用.
application-全局作用域
描述:
在一个http servlet context中,定义一个实例对象
使用场景:
Web应用的上下文,记录一个应用的共享信息.
websocket-HTTP WebSocket 作⽤域
描述:
在一个websocket周期中定义一个实例对象
使用场景:
WebSocket的每次会话中,保存了⼀个Map结构的头信息,将⽤来包裹客户端消息头。第⼀
次初始化后,直到WebSocket结束都是同⼀个Bean
设置作用域
使用@scope注解就可以声明Bean对象的作用域
①可以对方法注解使用
java
@Scope("prototype")
@Bean
public UserBean user1(){
UserBean userBean = new UserBean();
userBean.name = "haha";
return userBean;
}
②也可以对类注解使用
java
@Scope("prototype")
@Service//添加Service注解
public class UserService {
private String name;
public void hello(){
System.out.println("service-hello");
}
}