lazy-init属性和预实例化
在IOC容器的初始化过程中,主要就是对BeanDefinition的定义,载入,解析和注册。而我们所说的依赖注入是发生在应用第一次向容器所要bean的时候,也就是调用 getBean的时候。
spring在启动的过程中主要发生两个过程
- 初始化容器
- 对bean进行初始化并依赖注入(对no-lazy-init属性的bean)
我们所有说lazy-init就是懒加载,当一个bean的lazy-init属性为true的时候,在Spring启动的过程中它就不会进行初始化bean和依赖注入。
接下来我们看看她的具体实现,前面的初始化容器的代码就不看了,直接看实现preInstantiateSingletons方法
@Override
public void preInstantiateSingletons() throws BeansException {
if (logger.isTraceEnabled()) {
logger.trace("Pre-instantiating singletons in " + this);
}
// Iterate over a copy to allow for init methods which in turn register new bean definitions.
// While this may not be part of the regular factory bootstrap, it does otherwise work fine.
List<String> beanNames = new ArrayList<>(this.beanDefinitionNames);
// Trigger initialization of all non