美文网首页
spring自动创建所有bean(non-lazy-init)

spring自动创建所有bean(non-lazy-init)

作者: 旋转马达 | 来源:发表于2018-10-05 17:28 被阅读0次

以下代码就是spring容器的核心初始化流程,包括ApplicationContext的实现都是使用的这样的代码实现容器的启动和初始化的

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
reader.loadBeanDefinitions(new ClassPathResource("spring-beans.xml"));
logger.info("Pre-creating all beans");
beanFactory.preInstantiateSingletons();
logger.info("Complete pre-creating all beans");

reader.loadBeanDefinitions(new ClassPathResource("spring-beans.xml"));

这句代码会解析XML中定义的各种bean成为BeanDefinition然后注册到BeanFactory中,构造reader的时候我们传递了beanFactory作为reader的参数,这个时候就是使用beanFactory作为注册中心,所以loadBeanDefinitions就会解析之后注册beanFactory中。

beanFactory.preInstantiateSingletons();

这个方法是从org.springframework.beans.factory.config.ConfigurableListableBeanFactory继承过来的,作用很明显,就是预初始化所有单例的bean,当然这里包括惰性初始化的bean,也就是指定了(lazy-init)为true的bean,理解这一点也就是明白了spring的applicationContext初始化的核心代码。当然ApplicationContext还有很多其他的内容。

相关文章

网友评论

      本文标题:spring自动创建所有bean(non-lazy-init)

      本文链接:https://www.haomeiwen.com/subject/jyvqaftx.html