方法的执行顺序
- Bean 容器 / BeanFactory 通过对象的构造器或工厂方法先实例化 Bean;
- 设置对象属性
- 检查 xxxAware 相关接口,如果有就调用相应的 setxxx 方法把所需要的 xxx 传入到 Bean 中。
- 检查是否存在有关联的 BeanPostProcessors执行执行 postProcessBeforeInitialization() 方法进行前置处理
- 调用 @PostConstruct注解的方法
- 如果 Bean 实现了 InitializingBean 接口,执行 afterPropertiesSet() 方法。
- 检查是否配置了自定义的 init-method 属性,如果有就调用指定方法。
- 检查是否存在有关联的 BeanPostProcessors 执行 postProcessAfterInitialization() 方法进行后置处理
- 使用bean
- 当容器关闭时,调用@PreDestroy注解的方法
- 如果实现了 DisposableBean 接口,如果有就调用 destory() 方法。
- 如果 Bean 配置文件中的定义包含 destroy-method 属性,执行指定的方法。
实验代码
bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
"
default-init-method="init_method" default-destroy-method="destroy_method">
<context:component-scan base-package="spring" />
<bean class="spring.InitHelloWorld"/>
<bean id="hello" class="spring.Hello1" >
<property name="message" value