1、案例
import com.dzwl.easy.report.core.service.IUserDescService;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class InitializingBeanTest implements InitializingBean {@Autowiredprivate IUserDescService iUserDescService;private String testValue;@Overridepublic void afterPropertiesSet() throws Exception {this.testValue = "test";}
}初始化完成后,从容器中获取对应的Bean进行验证
InitializingBeanTest bean = SpringContextHolder.getBean(InitializingBeanTest.class);
2、InitializingBean 接口的执行时机
InitializingBean 的 afterPropertiesSet() 方法的执行时机是在spring完成依赖注入后,且在 Bean 正式投入使用之前
,具体执行顺序如下:
1)Bean 实例化:Spring创建bean的实例
2)依赖注入:Spring注入所有必要的依赖(通过构造器、Setter方法等)
3)调用 afterPropertiesSet() :如果Bean 实现了 InitializingBean 接口,Spring会调用 afterPropertiesSet() 方法,允许你在依赖注入完成后执行一些自定义的初始化调用。
3、调用 afterPropertiesSet() 的源码
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeInitMethods
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)