ObjectFactory和ObjectProvider是实现延迟查找的两个方法,但是干学不用没啥用,延迟查找有什么作用呢?
what
既然是延迟,就是推迟一段时间,为啥要推迟一段时间,就要理解spring的bean的生命周期。
当通过xml或者注解读取配置后,IOC容器BeanFactory会构建并读取BeanDefinition,然后初始化未BeanWrapper,保存在ApplicationContext中。而Provider会在调用getBean过程中未初始化Bean,或者在依赖注入过程中未初始化Bean,既进行了延迟,通过延迟,让ApplicationContext整体完成初始化后,在真正需要的时候再进行Bean的初始化。
why
这样能做到什么呢?
- 如果注入的实例为空,正常情况下会初始化抛出异常,通过延迟可以把异常延迟到运行的实际调用过程。
- 如果注入有多个实例子,通过延迟可以先保证多个实例加载成功,ObjectProvider的方法会根据Bean实现的Ordered接口或@Order注解指定的先后顺序获取一个Bean。
summary
延迟查找这种特性,需要结合bean的生命周期来理解才能明白背后原因。
网友评论