在spring上下文中,初始化和实例化是一样的吗



用编程的话说,字符串str=new String((;//实例化str="你好";//初始化

现在,在Spring中,出现了延迟初始化的概念。这是否意味着对象被延迟实例化或被延迟初始化?

或者,名称lazy-init属性或@lazyannotation是否具有误导性,因为它实际上是惰性实例化的?

附言:我知道从4.3开始,@lazy既可以用于懒惰初始化,也可以用于懒惰依赖项解析。

关于您的示例

String str = new String();
str = "hello";

同时涉及实例化和初始化。第一行实例化一个String,并用一个空字符串初始化它,这意味着如果您执行System.out.println,您将看到空而不是null

第二行实例化字符串池中的String常量,并用该值初始化str

对于您的Spring Lazy初始化问题,Spring Context使用延迟初始化来加快启动时间。在Spring中,只有当首次从Spring上下文请求Bean时,才会初始化中的Bean。请记住,初始化总是在实例化之后进行。

根据这一点(Spring文档(,@Lazy涉及延迟bean的实例化和初始化:

默认情况下,ApplicationContext实现急切地创建和将所有单例bean配置为初始化过程的一部分。通常,这种预实例化是可取的,因为配置或周围环境被立即发现,而不是几个小时甚至几天后。当此行为不是如果需要,可以通过以下方式防止单例bean的预实例化将bean定义标记为惰性初始化。惰性初始化bean告诉IoC容器在第一次请求,而不是在启动时。

最新更新