Java Springbean何时实例化
在上面,bean是在什么时候实例化的,是在创建ApplicationContext还是在调用getBean()时?假设bean是单例的,并且没有配置为惰性初始化,那么它是在启动上下文时创建的Java Springbean何时实例化,java,spring,Java,Spring,在上面,bean是在什么时候实例化的,是在创建ApplicationContext还是在调用getBean()时?假设bean是单例的,并且没有配置为惰性初始化,那么它是在启动上下文时创建的getBean()只需将其搜索出来即可 惰性初始化bean仅在首次引用时初始化,但这不是默认值。作用域bean(例如原型作用域)也将仅在首次引用时创建。根据Spring ApplicationContext实现的默认行为是在启动时急切地预实例化所有单例bean 此外,您还可以将它们设置为延迟加载。有关参考信息
getBean()
只需将其搜索出来即可
惰性初始化bean仅在首次引用时初始化,但这不是默认值。作用域bean(例如原型作用域)也将仅在首次引用时创建。根据Spring
ApplicationContext实现的默认行为是在启动时急切地预实例化所有单例bean
此外,您还可以将它们设置为延迟加载。有关参考信息,请参阅
- 及
- 创建应用程序上下文时,将构造一个没有将lazy init属性设置为true(默认值为false)的单例bean(默认范围)
- 当第一次请求时,将构造一个将lazy init属性设置为true的单例bean
- 任何其他作用域中的bean集都是在第一次请求时创建的(针对该作用域)
默认情况下,它是在启动上下文时创建的,但顺序取决于依赖项。 如果我们有以下课程:
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"com/springinaction/springidol/spring-idol.xml");
Performer performer = (Performer) ctx.getBean("duke");
performer.perform();
类A将在类B之前创建,因为类B依赖于类A。默认情况下,Spring ApplicationContext在应用程序启动期间急切地创建并初始化所有“单例作用域”bean。ApplicationContext使bean在BeanFactory中可用。getBean()返回bean的实例。这取决于使用getBean()方法调用的bean的范围。 如果是“Singleton”,则由ApplicationContext预先实例化 如果您将BeanFactory用作IOC容器,那么它将使用延迟初始化,并且只有在调用getBean()方法时才会实例化bean
这是ApplicationContext相对于BeanFactory的一个优势,它解决了循环依赖性问题。这就是单例bean的行为。但正常人的行为是什么beans@java_geek:单身是正常的。他们是默认的。对你来说什么是正常的?我想知道BeanFactory是否设置了singleton=false如果使用BeanFactory,Bean是否被延迟加载?@java\u geek:Well
BeanFactory
只是一个接口,它取决于你使用的实现,但通常是的,大多数(如果不是全部)都是相同的BeanFactory
implementations.@Skaffman:对不起,我知道如果bean的作用域是singleton,那么在创建新的ApplicationContext时会创建它,但如何测试它是创建的还是否?在prototype中,我调用getBeanDefinitionNames,它仍然出现
@Component
public class A{
}
@Component
public class B{
@Autowired
A a;
}