当前位置: 首页 > 知识库问答 >
问题:

使用@Lazy时Bean创建和初始化之间的区别

楮法
2023-03-14

Spring IOC在启动时创建并初始化bean。bean的创建和初始化有什么区别?

在使用@Lazy时,据说用@Lazy注释的bean将被惰性地实例化。这是否意味着,该bean将在ApplicationContext启动时创建[像其他未使用@Lazy注释的bean一样],并在首次引用时初始化?

共有1个答案

邓毅
2023-03-14

@懒惰的

指示是否延迟初始化bean。可用于直接或间接用@Component注释的任何类或用@Bean注释的方法。

如果@Component或@Bean定义中不存在此注释,则将发生紧急初始化。如果存在并设置为true,@Bean或@Component将不会被初始化,直到被另一个Bean引用或从封闭的BeanFactory显式检索。如果存在并设置为false,则bean将在启动时由执行单例急切初始化的bean工厂实例化。

如果@Configuration类上存在Lazy,则表示该@Configuration中的所有@Bean方法都应该被延迟初始化。如果@Lazy在@Lazy注释的@Configuration类中的@Bean方法上存在且为false,则表示重写了“默认的Lazy”行为,并且应该急切地初始化Bean。

除了用于组件初始化之外,此注释还可以放置在标记为Autowired或Inject的注入点上:在该上下文中,它会导致为所有受影响的依赖项创建延迟解析代理,作为使用ObjectFactory或Provider的替代方法。

 类似资料:
  • 我不知道这是否是实现我的解决方案的更好方法: 该类是可序列化的,因为我从数据库的Json中获取内容,并将内容映射到对象GetFromJson中(我只需要在数据库中执行一次查询)。因为这个原因,我需要在我所有的应用程序中使用对象,因为这个原因,我认为我需要使用一个单例 有人给我发布了一个库来从数据库中获取JSON。JSON对象解析为,因此我创建了我的类。 现在我有很多rest服务,在我的rest服务

  • 在kotlin中,我们可以使用以下两种方法和 什么时候使用哪种方法,这两种方法实际上是在下面进行的。哪一种方法是最好的?

  • 下面是我的文件: bean初始化失败 更多跟踪: 原因:org.springframework.beans.factory.unsatisfiedDependencyException:创建类路径资源[org/springframework/boot/autocconfigure/session/sessionrepositoryfilterconfiguration.class]中定义的名为“s

  • 问题内容: 如标题所示,两者之间到底有什么区别 和 除了结构以外,还有什么重要区别吗? 问题答案: 对于您的示例,没有区别。但是如您所见, 只能接受一个表达式来初始化变量。但是,在静态初始化器(JLS 8.7)中,可以执行任意数量的语句。例如,可以这样做: 对于您的示例,显然不需要这样做,但是变量的初始化可能不仅仅使用表达式,甚至可能包含许多语句,因此Java制作了静态初始化器。

  • 完全错误: BeanCreationException:创建名为“Transaction ManagerPostProcessor”的bean时出错:bean初始化失败;嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为“事务管理器”的bean时出错:在设置bean属性“会话工厂”时无法解析对bean“会话工厂”的引用