在spring上下文中,初始化和实例化是相同的吗?

在spring上下文中,初始化和实例化是相同的吗?,spring,dependency-injection,lazy-initialization,Spring,Dependency Injection,Lazy Initialization,用编程语言来说, String str=新字符串();//实例化 str=“你好”//初始化 现在,在春天,有了延迟初始化的概念。这是否意味着对象是延迟实例化的还是延迟初始化的 或者,名称lazy init属性或@lazy annotation实际上是惰性实例化的,这是不是有误导性 另外,我从4.3开始理解,@lazy既可以用于延迟初始化,也可以用于延迟依赖项解析 关于你的例子 String str = new String(); str = "hello"; 包括实例化和初始化。第一行实例化

用编程语言来说, String str=新字符串();//实例化 str=“你好”//初始化

现在,在春天,有了延迟初始化的概念。这是否意味着对象是延迟实例化的还是延迟初始化的

或者,名称lazy init属性或@lazy annotation实际上是惰性实例化的,这是不是有误导性


另外,我从4.3开始理解,@lazy既可以用于延迟初始化,也可以用于延迟依赖项解析

关于你的例子

String str = new String();
str = "hello";
包括实例化和初始化。第一行实例化一个字符串并用空字符串初始化它,这意味着如果执行
System.out.println
操作,您将看到空字符串而不是
null

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

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

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

默认情况下,ApplicationContext实现急切地创建和 在初始化过程中配置所有单例bean。 通常,这种预实例化是可取的,因为 立即发现配置或周围环境, 而不是几个小时甚至几天后。当这种行为不存在时 您可以通过以下方法防止单例bean的预实例化: 将bean定义标记为已初始化。懒汉 bean告诉IoC容器在运行时创建一个bean实例 首先请求,而不是在启动时


因此,当我们说惰性单例或原型时,实际上意味着这些对象是在创建上下文时创建的,但只有在实际引用它们时才初始化?实例化是bean初始化过程的一部分。这是注入依赖项和初始化回调之前的第一步(
@PostConstruct
InitializingBean
以及几个感知接口)。