1. bean的作用域
- singleton:单例模式,spring bean默认就是这个模式。
- prototype:每次请求都会创建一个新的bean。
- request:每次http请求都会创建一个新的bean,该bean在当前http request内生效。
- session:每次http请求都会创建一个新的bean,该bean在当前http session内生效。
- globle-session:全局session作用域。
2. bean生命周期
- 实例化
- 属性赋值
- 初始化
- 销毁
2.1. 实例化
- Spring容器启动时,根据配置文件或注解找到需要创建的bean的定义信息。
- 对于单例bean,容器启动时就会进行实例化;对于原型bean,每次请求时才会实例化。
- Spring用反射机制创建bean的实例。
2.2. 属性注入
- 实例化bean之后,Spring将配置好的属性值注入bean中。有构造函数注入、Setter注入或字段注入(Autowired:按类型注入;Resource:先按名称,找不到再按类型;Inject:java的注解,不局限于spring)等方式实现。
- 如果bean有依赖其他的bean,会先创建并注入这些依赖的bean,确保依赖关系正确建立。
2.3. 初始化
- 实现了InitializingBean接口的bean,用afterPropertiesSet()方法进行初始化。
- 可在bean配置中指定init-method属性,指向一个自定义的初始化方法,属性注入完成后调用这个方法进行初始化。
2.4. 销毁
- 对于单例bean,Spring容器关闭时,进入销毁阶段。
- 实现了DisposableBean接口的 bean,会调用其destroy()方法进行销毁操作。
- 可以在bean配置中指定destroy-method属性,指向一个自定义的销毁方法,Spring在容器关闭时调用这个方法进行清理工作。