Spring中Bean的作用域和生命周期
目录
- bean 的六种作用域
- 单例作用域:
- prototype:原型作用域
- request:请求作用域:
- session:会话作用域:
- Application: 全局作用域 :
- Bean的生命周期
- 实例化
- 属性赋值:
- 初始化:
- 使用bean
- 销毁bean
bean 的六种作用域
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只有一个实例
@AutowiredApplicationContext context;@Resource(name = "singleDog")Dog singleDog;@RequestMapping("/singleton")public String singleton(){Dog contextDog = context.getBean("singleDog",Dog.class);return "contextDog: " + contextDog + " resources: " + singleDog;}
prototype:原型作用域
** 每次使用该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;}
request:请求作用域:
每个HTTP 请求生命周期内, 创建新的实例
@Bean@RequestScopepublic Dog requestDog(){return new Dog();}//从spring上下文获取@RequestMapping("/request")public String request(){Dog contextDog = context.getBean("requestDog", Dog.class);return "contextDog:"+ contextDog + ", resources:" +requestDog;}
#
session:会话作用域:
每个HTTP Session⽣命周期内, 创建新的实例
@Bean@SessionScopepublic Dog sessionDog(){return new Dog();}//从spring上下文获取@RequestMapping("/session")public String session(){Dog contextDog = context.getBean("sessionDog", Dog.class);return "contextDog:"+ contextDog + ", resources:" +sessionDog;}
Application: 全局作用域 :
每个ServletContext生命周期内, 创建新的实例(web环境中, 了解)
//原对象
@Bean@ApplicationScopepublic Dog applicationDog(){return new Dog();}//从spring上下文获取@RequestMapping("/application")public String application(){Dog contextDog = context.getBean("applicationDog", Dog.class);return "contextDog:"+ contextDog + ", resources:" +applicationDog;}
Bean的生命周期
生命周期指的是⼀个对象从诞生到销毁的整个生命过程, 我们把这个过程就叫做⼀个对象的生命周期,bean对象生命周期可以分为5个部分
实例化
就是为Bean分配内存空间
属性赋值:
通过bean注入和装配的方式, 如@AutoWired,@resource
初始化:
执行各种通知,在AutowireCapableBeanFactory接口中有定义AbstractAutowireCapableBeanFactory和AbstractBeanFactory方法中实现
使用bean
销毁bean
销毁容器的各种⽅法, 如 @PreDestroy , DisposableBean 接口⽅法, destroymethod.