Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Springbean何时实例化_Java_Spring - Fatal编程技术网

Java Springbean何时实例化

Java Springbean何时实例化,java,spring,Java,Spring,在上面,bean是在什么时候实例化的,是在创建ApplicationContext还是在调用getBean()时?假设bean是单例的,并且没有配置为惰性初始化,那么它是在启动上下文时创建的getBean()只需将其搜索出来即可 惰性初始化bean仅在首次引用时初始化,但这不是默认值。作用域bean(例如原型作用域)也将仅在首次引用时创建。根据Spring ApplicationContext实现的默认行为是在启动时急切地预实例化所有单例bean 此外,您还可以将它们设置为延迟加载。有关参考信息

在上面,bean是在什么时候实例化的,是在创建ApplicationContext还是在调用getBean()时?

假设bean是单例的,并且没有配置为惰性初始化,那么它是在启动上下文时创建的
getBean()
只需将其搜索出来即可

惰性初始化bean仅在首次引用时初始化,但这不是默认值。作用域bean(例如原型作用域)也将仅在首次引用时创建。

根据Spring

ApplicationContext实现的默认行为是在启动时急切地预实例化所有单例bean

此外,您还可以将它们设置为延迟加载。

有关参考信息,请参阅

以下是创建bean的简要说明:

  • 创建应用程序上下文时,将构造一个没有将lazy init属性设置为true(默认值为false)的单例bean(默认范围)
  • 当第一次请求时,将构造一个将lazy init属性设置为true的单例bean
  • 任何其他作用域中的bean集都是在第一次请求时创建的(针对该作用域)
  • 默认情况下,所有bean都是单例的,所以无论何时创建应用程序上下文,它们都是预加载的。具体地说,如果任何单例bean都设置了属性lazy init=“true”,那么它将被延迟加载,也就是说,当第一次调用getBean方法时,它将被实例化

  • 对于其他作用域,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;
    
    }