Spring 原理
Bean 的作用域
Spring 支持 6 种作用域,后 4 种在 Spring MVC 环境下生效:
- singleton:单例作用域(默认)。每个 Spring IoC 容器内同名称的 Bean 只有一个实例。
- prototype:原型作用域(多例)。每次使用该 Bean 时会创建新的实例。
- request:请求作用域。每个 HTTP 请求生命周期内创建新的实例。
- session:会话作用域。每个 HTTP Session 生命周期内创建新的实例。
- application:全局作用域。每个 ServletContext 生命周期内创建新的实例。
- websocket:WebSocket 作用域。每个 WebSocket 生命周期内创建新的实例。
概念:从 Context 中获取对象,得到的都是同一个,这种行为模式称为 Bean 的作用域。
验证单例模式
从 ApplicationContext 获取对象或属性注入获取对象,对比哈希值确认是否为同一实例。
@Configuration
public class BeanConfig {
@Bean
public User user1() {
return new User(1, "zhangsan");
}
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@Bean
public User singleUser() {
return new User();
}
}
@RestController
public class BeanScopeController {
@Autowired
private ConfigurableApplicationContext context;
@Resource(name = "singleUser")
private User singleUser;
@RequestMapping("/single")
public String single() {
context.getBean();
+ System.identityHashCode(obj1) +
+ System.identityHashCode(singleUser);
}
}


