Bean 的作用域是指 Bean 在 Spring 框架中的某种行为模式,比如单例作用域,在spring中只有一份是全局共享的
作用域 | 说明 |
|---|---|
singleton | 每个SpringIoC容器内同名称的bean只有一个实例(单例)(默认) |
prototype | 每次使用该bean时会创建新的实例(非单例) |
request | 每个HTTP 请求⽣命周期内, 创建新的实例(web环境中, 了解) |
websocket | 每个WebSocket⽣命周期内, 创建新的实例(web环境中, 了解) |
session | 每个HTTP Session⽣命周期内, 创建新的实例(web环境中, 了解) |
application | 每个ServletContext⽣命周期内, 创建新的实例(web环境中, 了解) |
下面通过看每个对象的地址来查看,Dog对象的某种行为模式
每个SpringIoC容器内同名称的bean只有一个实例
@Autowired
ApplicationContext context;
@Resource(name = "singleDog")
Dog singleDog;
@RequestMapping("/singleton")
public String singleton(){
Dog contextDog = context.getBean("singleDog",Dog.class);
return "contextDog: " + contextDog + " resources: " + singleDog;
}
** 每次使用该bean时会创建新的实例**
@Bean
@Scope("prototype")
public Dog prototypeDog(){
return new Dog();
}
//从spring上下文获取
@RequestMapping("/prototy")
public String prototy(){
Dog contextDog = context.getBean("prototypeDog",Dog.class);
return "contextDog: " + contextDog + " resources: " + singleDog;
}



每个HTTP 请求生命周期内, 创建新的实例
@Bean
@RequestScope
public Dog requestDog(){
return new Dog();
}
//从spring上下文获取
@RequestMapping("/request")
public String request(){
Dog contextDog = context.getBean("requestDog", Dog.class);
return "contextDog:"+ contextDog + ", resources:" +requestDog;
}
#

每个HTTP Session⽣命周期内, 创建新的实例
@Bean
@SessionScope
public Dog sessionDog(){
return new Dog();
}
//从spring上下文获取
@RequestMapping("/session")
public String session(){
Dog contextDog = context.getBean("sessionDog", Dog.class);
return "contextDog:"+ contextDog + ", resources:" +sessionDog;
}
每个ServletContext生命周期内, 创建新的实例(web环境中, 了解)
//原对象
@Bean
@ApplicationScope
public Dog applicationDog(){
return new Dog();
}
//从spring上下文获取
@RequestMapping("/application")
public String application(){
Dog contextDog = context.getBean("applicationDog", Dog.class);
return "contextDog:"+ contextDog + ", resources:" +applicationDog;
}
生命周期指的是⼀个对象从诞生到销毁的整个生命过程, 我们把这个过程就叫做⼀个对象的生命周期,bean对象生命周期可以分为5个部分
就是为Bean分配内存空间
通过bean注入和装配的方式, 如@AutoWired,@resource
执行各种通知,在AutowireCapableBeanFactory接口中有定义AbstractAutowireCapableBeanFactory和AbstractBeanFactory方法中实现




销毁容器的各种⽅法, 如 @PreDestroy , DisposableBean 接口⽅法, destroymethod.