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

@lazy和代理bean如何影响Spring中的循环依赖?

松俊美
2023-03-14

让我们看看下面的例子

    @Service
    class AServiceImpl{

         @Autowired
         BService bservice
    }

    @Service
    class BServiceImpl{

         @Autowired
         AService aservice
    }
@Lazy
@Service
class AServiceImpl{

     @Autowired
     BService bservice
}
@Service
class BServiceImpl{

     @Lazy
     @Autowired
     AService aservice
}

对这个注释的一些解释说,如果注释的bean被另一个bean引用,那么它将被初始化。但我认为不管有它还是没有它,“带注释的bean如果被另一个bean引用总是会被初始化”,那么它怎么解决循环依赖问题呢?

另一种解释是,如果调用了带注释的bean的方法,它就会被初始化,这听起来很合理,但我尝试了,在我看来,即使没有调用AService中的任何方法,B仍然可以持有对AService的最终代理bean的引用,我的尝试有什么问题吗?

共有1个答案

翟缪文
2023-03-14

另一种方法是在构造函数内部

@Autowired
public AService(@Lazy BService bservice) {
    this.bservice = bservice;
}

它不会完全初始化bean,而是创建一个代理将其注入到另一个bean中。注入的bean只有在第一次需要时才会完全创建。

 类似资料:
  • 问题内容: 我目前正在研究Vaadin春季应用程序。根据应用规范,必须通过查询数据库来完成对用户的身份验证/授权。如何解决这个问题?我正在使用Spring Boot 1.4.2.RELEASE。 更新 :此方法适用于Spring Boot 1.1.x.RELEASE,但是在最新版本中会产生以下错误消息。 原始代码如下所示: 帐户存储库: JdbcAccountRepository: JdbcUse

  • 问题内容: 我最近一直在使用nodejs,并且仍然要处理模块系统,因此很抱歉这是一个明显的问题。我想要大致如下的代码: a.js (主文件与节点一起运行) b.js 我的问题似乎是我无法从ClassB实例中访问ClassA实例。 有没有正确/更好的方法来构造模块来实现我想要的?是否有更好的方式在模块之间共享变量? 问题答案: 尽管node.js确实允许循环依赖,但正如您所发现的那样,它可能很杂乱,

  • 我最近一直在使用nodejs,并且仍然在掌握模块系统,所以如果这是一个明显的问题,请原谅。我想要大致如下的代码: a.js(主文件与节点一起运行) b.js 我的问题似乎是我无法从ClassB的实例中访问ClassA的实例。 有没有正确/更好的方法来构建模块以实现我想要的?有没有更好的方法在模块之间共享变量?

  • 本文向大家介绍详解Spring Bean的循环依赖解决方案,包括了详解Spring Bean的循环依赖解决方案的使用技巧和注意事项,需要的朋友参考一下 如果使用构造函数注入,则可能会创建一个无法解析的循环依赖场景。 什么是循环依赖 循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图: 注意,这里不是函数的循环调用,

  • 问题内容: 我正在将Java项目从Ant迁移到Gradle。我认为最好的解决方案是使用Gradle的多项目支持,但是我找不到摆脱循环依赖的方法。 原始项目已设置为具有以下布局: 之间的关系,并且,是棘手的。将取决于或根据配置文件。同样,无论配置属性如何,都依赖和。并且永远不会在同一时间建造。 我认为一种快速的解决方案是在: 接下来,我想过要找到一种方法来使之更接近公正工作。这导致我想到了这一点: