我们前面已经知道,bean组件如果是单例的,那么在创建IOC容器完成时就已经创建和初始化了,如果是多实例,那么在使用时才创建,那么什么时候关闭呢?
通过查看继承树,发现在ConfigurableApplicationContext接口中存在close方法。
接下来我们自定义bean的生命周期看看,是不是这么一个过程。
我们可以看到,每一个bean都有一个初始化的方法和销毁的方法。
接下来我们进行测试
我们不知道什么时候销毁的bean,程序就已经结束了。打开注解
执行了destroy方法,容器一关闭,bean就会被销毁。上面的是单例的bean组件,那原型bean也是这样的生命周期吗?
试试
发现,就算调用了close()方法,IOC容器关闭,bean也没有被销毁,其实只要原型bean本身不持有对另一个资源的引用,删除了对该对象的所有引用或对象超出范围,就会被当成垃圾进行回收。所以,通常没有必要显式销毁原型bean。
注意,无论bean有无初始化方法,后置处理器都会工作
BeanPostProcessor简称bean的后置处理器,分为在初始化之前和初始化之后。
也就是在bean初始化之前执行的操作和初始化之后执行的操作,这里就有一个问题,属性的注入是发生在什么时候,我结合之前的类的装载流程,判断是发生在初始化之后。但是结合实际操作,我是错的,哈哈哈
我发现属性的注入是发生在初始化之前的。