销毁Bean的动作发生在容器关闭的时候,当Spring程序中发生BeansException异常是会触发,还有我们也可以手动关闭容器,关闭容器后,Spring中的所有Bean都会被清理掉,这时候如果再去获取对应的Bean,就会发生异常。 1.手动关闭容器 为了去分析源码,我们这里直接手动去关闭Spring容器,直接调用close()方法关闭容器。 手动调用关闭容器...
public class MyBean{ // 2、设置属性值 @Value("${spring.tel}") private String tel; // 无参构造函数 public MyBean() { System.out.println("1、实例化 MyBean,属性 tel = " + tel); } @PostConstruct public void init2(){ System.out.println("3、MyBean @PostConstruct 初始化方法,属性tel ...
- Root WebApplicationContext: initialization completed in 4143 ms init mongoHosts:[Ljava.lang.String;@46fb9581mongoPort:37017 2.4 @PostConstruct InitilizingBean InintMethod执行顺序 bean初始化执行顺序先后分为 构造 属性填充 初始化,而已上三种方式对应这三个阶段:@PostConstruct在构造结束后调用,Iniitilizing...
初始化 initializeBean() 方法如下: 1protectedObject initializeBean(finalString beanName,finalObject bean, @Nullable RootBeanDefinition mbd) {2if(System.getSecurityManager() !=null) {3AccessController.doPrivileged((PrivilegedAction<Object>) () ->{4invokeAwareMethods(beanName, bean);5returnnull;6}, ...
* essential property) or if initialization fails for any other reason */ voidafterPropertiesSet()throwsException; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 2.DisposableBean 该接口的作用是:允许在容器销毁该bean的时候获得一次回调。DisposableBean接口也只规定了一个方法:destroy ...
前两篇文章分析了Spring XML和注解的解析原理,并将其封装为BeanDefinition对象存放到IOC容器中,而这些只是refresh方法中的其中一个步骤——obtainFreshBeanFactory,接下来就将围绕着这些BeanDefinition对象进行一系列的处理,如BeanDefinitionRegistryPostProcessor对象方法的调用、BeanFactoryPostProcessor对象方法的调用以及Bean实例...
InitializingBean是Spring中很关键的一个扩展接口,其实它和bean中init-method属性对应的方法功能是一致的,都是初始化bean,我们可以二选一实现即可,当然同时使用也没有问题。init-method是通过反射实现的,性能相对差一点点。另外,如果调用afterPropertiesSet方法时出错,则不会调用init-method指定的方法。
而对于 Spring Bean 的生命周期来说: 实例化 Instantiation 属性赋值 Populate 初始化 Initialization 销毁Destruction 实例化 -> 属性赋值 -> 初始化 -> 销毁 只有四个步骤,这样拆解的话是不是感觉也不难?不像其他人写的那样直接一上来就各种 BeanPostProcessor、BeanFactoryPostProcessor 全部怼进流程里去,别说读者...
* as failure to set an essential property) or if initialization fails. */ void afterPropertiesSet() throws Exception; } 从方法名afterPropertiesSet也可以清楚的理解该方法是在属性设置后才调用的。 二、源码分析接口应用 通过查看spring的加载bean的源码类(AbstractAutowireCapableBeanFactory)可以看到 ...
package org.springframework.beans.factory;/*** Interface to be implemented by beans that need to react once all their* properties have been set by a BeanFactory: for example, to perform custom* initialization, or merely to check that all mandatory properties have been set.** An alternative...