Spring Bean
Posted Kirl z
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Bean相关的知识,希望对你有一定的参考价值。
Spring Bean
1. Spring Bean
Spring 框架是提供容器统一管理 Bean 对象(Java对象), 及对象间依赖关系
Spring IoC 容器管理的对象成为 Bean,Bean 根据 Spring 配置文件中的信息创建
Spring 配置文件支持两种格式,即 XML 和 Properties 文件格式
- Properties 配置文件主要以 key - value 健值对的形式存在,只能赋值,不能进行其他操作,适合于简单的属性配置。
- XML 配置文件是树形结构,相对于 Properties 文件来说更为灵活。XML 配置文件结构清晰,但是内容比较繁琐,适用于大型复杂的项目。
2. Spring Bean 的作用域
Spring 容器在初始化一个 Bean 实例时,同时会指定该实例的作用域。
- singleton: 单例模式,在整个Spring IoC容器中,singleton作用域的Bean将只生成一个实例。
- prototype: 每次通过容器的getBean()方法获取prototype作用域的Bean时,都将产生一个新的Bean实例。
- request: 对于一次HTTP请求,request作用域的Bean将只生成一个实例,这意味着,在同一次HTTP请求内,程序每次请求该Bean,得到的总是同一个实例。只有在Web应用中使用Spring时,该作用域才真正有效。
- session:该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效。
如果不指定Bean的作用域,Spring默认使用singleton作用域。prototype作用域的Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成果,就可以重复使用。因此,应该尽量避免将Bean设置成prototype作用域。
3. Spring Bean 生命周期
传统 Java 应用中, Bean 的生命周期很简单,使用关键字 new 实例化 Bean,当不需要该 Bean 时,由 Java 自动回收。
Spring 中 Bean 的生命周期比较复杂,可以表示为:
- Bean 的定义 -> Bean 的初始化 -> Bean 的使用 -> Bean 的销毁。
Spring 根据 Bean 的作用域来选择管理方式。对于 singleton 作用域的 Bean,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁;而对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。
Spring Bean 生命周期
- 实例化Bean:通过反射调用构造方法实例化对象。
- 依赖注入:装配Bean的属性
- 实现了Aware接口的Bean,执行接口方法:如顺序执行BeanNameAware、BeanFactoryAware、
ApplicationContextAware的接口方法。 - Bean对象初始化前,循环调用实现了BeanPostProcessor接口的预初始化方法
(postProcessBeforeInitialization) - Bean对象初始化:顺序执行@PostConstruct注解方法、InitializingBean接口方法、init-method
方法 - Bean对象初始化后,循环调用实现了BeanPostProcessor接口的后初始化方法
(postProcessAfterInitialization) - 容器关闭时,执行Bean对象的销毁方法,顺序是:@PreDestroy注解方法、DisposableBean接口
方法、destroy-method
以上是关于Spring Bean的主要内容,如果未能解决你的问题,请参考以下文章
外置 tomcat启动Spring Boot程序模式下解决过滤器注入bean的空指针问题