在Spring上下文中,初始化和实例化是否相同?

时间:2018-12-13 03:35:22

标签: spring dependency-injection lazy-initialization

用编程的话来说, 字符串str = new String(); //实例化 str =“ hello”; //初始化

现在,在Spring中,有了惰性初始化的概念。这是否意味着它们是对象的延迟实例化还是延迟了初始化?

或者,名称lazy-init属性或@lazy批注是否会误导它实际上是延迟实例化的?

P.S。从4.3版本开始,我可以理解@lazy既可以用于延迟初始化,也可以用于延迟依赖项解析。

2 个答案:

答案 0 :(得分:0)

关于您的示例

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

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

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

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

答案 1 :(得分:0)

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

  

默认情况下,ApplicationContext实现会急于创建和   在初始化过程中配置所有单例bean。   通常,这种预实例化是可取的,因为   立即发现配置或周​​围环境,   而不是几个小时甚至几天之后。当这种行为不是   理想的是,您可以通过   将Bean定义标记为延迟初始化。延迟初始化   bean告诉IoC容器何时创建一个bean实例   首先请求,而不是在启动时。