原创文章,转载请注明原文章地址,谢谢!
@Lazy
@Lazy主要针对于单实例Bean而言,是懒加载的意思。我们知道在单实例Bean中,IoC容器启动后,实例就已经被创建,等到后面需要使用Bean的时候,直接从容器中获取就可以了。
@Configuration
public class MainConfig {
@Bean
public Person person() {
System.out.println("创建对象...");
return new Person();
}
}
@Test
public void testScope() {
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(MainConfig.class);
System.out.println("IoC容器启动完成...");
Object person = applicationContext.getBean("person");
Object person2 = applicationContext.getBean("person");
System.out.println(person == person2);
}
测试结果为
创建对象...
IoC容器启动完成...
true
加上@Lazy注解
@Configuration
public class MainConfig {
@Bean
@Lazy
public Person person() {
System.out.println("创建对象...");
return new Person();
}
}
测试结果为
IoC容器启动完成...
22:32:24.924 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'person'
创建对象...
true
分析:IoC容器启动的时候,并不会去初始化实例,而在第一次获取的时候,创建Bean并放入到容器中,等到第二次再获取的时候,因为是单例,所以不再创建,而是直接从容器中获取,取出的Bean也是同一个。
博客内容仅供自已学习以及学习过程的记录,如有侵权,请联系我删除,谢谢!
网友评论