实现InitializingBean 接口,必须重写重写方法afterPropertiesSet(),此时实例已经创建,并且属性已经赋值完成,如下图 在执行到afterPropertiesSet 方法时,demo 属性已经赋值完成,然后在afterPropertiesSet 方法内就可以利用属性属性实现某一些功能
@Component
public class InitializingBeanImpl implements InitializingBean {
@Value("${demo:spring}")
private String demo;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("调用 InitializingBeanImpl.afterPropertiesSet() 值是: "+this.demo);
}
}
具体调用链如下
AbstractAutowireCapableBeanFactory.doCreateBean()
->AbstractAutowireCapableBeanFactory.initializeBean()
->AbstractAutowireCapableBeanFactory.invokeInitMethods()
->InitializingBeanImpl.afterPropertiesSet()
此类InitializingBeanImpl 中demo 的赋值是在AbstractAutowireCapableBeanFactory.initializeBean() 上一步完成的,即populateBean(beanName, mbd, instanceWrapper) 具体的以后再聊