@Validated 服务无法自动装配自身

2023-12-07

如果 Service 类使用 Validated 注释进行注释,则同一类无法自动装配自身。

@Service
@Validated
public class SomeService {
    @Autowired
    private SomeService someService;
}

这是 Spring Context 尝试加载时抛出的异常:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'someService' defined in file [/home/user/company/code/project/target/classes/com/company/project/controller/SomeService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'someService': Bean with name 'someService' has been injected into other beans [someService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1193) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1095) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE]
    at com.company.project.ProjectApplication.main(ProjectApplication.java:16) [classes/:na]
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'someService': Bean with name 'someService' has been injected into other beans [someService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:585) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    ... 19 common frames omitted

另外,当您有很多类依赖项时(当有一个服务使用使用第一个服务的其他服务时),就会发生这种情况。我想知道 @Validated 注释,但我总是在使用 bean 时遇到同样的错误。

有人知道我该如何解决这个问题吗?


注释@Validated在这种情况下与不正确的自动装配无关。正确阅读错误,您就会发现问题所在。第一行是自我描述:

创建名称为“someService”的 bean 时出错:名称为“someService”的 Bean 已作为循环引用的一部分注入其原始版本中的其他 bean [someService],但最终已被包装。这意味着所述其他 bean 不使用该 bean 的最终版本。这通常是过度渴望类型匹配的结果 - 例如,考虑使用“getBeanNamesOfType”并关闭“allowEagerInit”标志。

您将相同的服务自动连接到其自身中,这会导致无休止的圆形 bean 连接。一个办法?不要这样设计 Bean。如果您确实受限于此设计,请使用:

  • 二传手注射
  • @Lazy or @PostConstruct注释

有关此问题的更多信息,请访问 Baeldung 的网页:https://www.baeldung.com/circular-dependency-in-spring

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Validated 服务无法自动装配自身 的相关文章

随机推荐

  • 使用 ASP.Net MVC 将图像上传到 SQL Server 2005?

    我知道有一种方法可以将图像作为图像类型或 varbinary 类型上传到数据库 但是 我搜索了整整一周 我找不到任何可以帮助我的东西 所以这确实是我的最后手段 如果有人知道的话如何将图像上传到数据库 我使用的是SQL Server 2005
  • C 标准库头文件的 Eclipse CDT 出现“未解决的包含”错误

    我为eclipse设置了CDT并编写了一个简单的hello world C程序 include
  • git update remote 之后,新的上游分支可见,但原始分支不可见

    首先我的术语 上游 是原始的 apache 存储库 在 github 上 origin 是我的 apache repo 的分支 也在 github 上 执行以下命令后 git remote update git fetch 我看到 apac
  • 将集合复制到自身中

    如何将 mongodb 集合复制到自身中并发生冲突 id由一个新的解决 id 使用复制单个文档答案在这里对于大型集合来说是不可行的 我想这样做是为了人为地增加测试样本的大小 这只是为了测试可扩展性 所以我想 我可以将集合复制到自身中几次来达
  • onAuthStateChanged 更改 Firebase 3.0.0 后参考不会重新运行

    下面的代码附加了一个观察者users 路径并在值更改时记录用户 在火力基地上 这users 树的门控取决于当前经过身份验证的用户的访问权限 firebase auth onAuthStateChanged function user if
  • 如何正确终止信号处理程序中的线程?

    我想为 SIGSEGV SIGILL 和可能的其他一些信号设置一个信号处理程序 这些信号不是终止整个进程 而是终止有问题的线程 并且可能在某处设置一个标志 以便监视线程可以抱怨并启动另一个线程 我不确定是否有安全的方法来做到这一点 Pthr
  • 将日期数据从 SAS 传输到 R

    我将 sas7 数据集应用到 R 中 问这个问题很奇怪 我的变量之一是访问日期 现在看起来像这样 我想知道在哪里可以将它们转换回 MM DD YYYY 因为我需要排除小于 MDY 08 01 2010 的数据 gt chris visit
  • 添加 Web 引用将 IList 更改为 Array[]

    当我向客户端应用程序添加 Web 引用时 Web 引用类属性将从 IList 更改为数组 下面是片段 这其中有什么理由吗 我只是更喜欢使用 IList 因为它们非常动态 我可以在客户端将其更改为 ILists 吗 服务器端 DataMemb
  • 根据第一个下拉列表的结果填充第二个下拉列表

    目前我使用动态选择来填充下拉列表 我想做的是显示第二个下拉列表 其中包含基于第一个选择的结果 我不知道如何解决这个问题并寻找答案但无济于事 我已经包含了用于填充第一个菜单的代码 如果您需要任何进一步的代码 请告诉我 如果有人可以帮助编写代码
  • 在 Docpad 中仅显示部分博客文章,并带有“阅读更多”链接

    我只需要显示部分博客文章 以及完整博客文章的 阅读更多 链接 主页 列出最后 5 篇部分 介绍帖子 并附有 阅读更多 这在 Docpad 中可能吗 Thanks May by getCuttedContent content gt i co
  • Delphi 2007 未正确使用 JAX-WS Web 服务

    当我尝试使用我使用 JAX WS 在 Java 中设置的 Web 服务时 我遇到了 Delphi 2007 的问题 该 Web 服务可以从另一个 Java 程序和 C ASP NET 2 0 网站正常使用 但是 当我尝试使用 Delphi
  • 如何在Powershell上仅获取服务器的正常运行时间?

    我有以下代码 当我直接在 powershell 中使用时它可以工作 Get WmiObject win32 operatingsystem select LABEL LastBootUpTime EXPRESSION ConverttoDa
  • JS Iframe 加载器

    我正在寻找一种方法 在 iframe 加载时使用 jQuery js 显示 正在加载 消息 当 iframe 完全加载完毕时 正在加载 文本应该消失 jquery js 可以吗 注意 我对 iframe 内的网站没有任何控制权 div Pl
  • 我什么时候真正需要使用atomic而不是bool? [复制]

    这个问题在这里已经有答案了 Isn t atomic
  • javascript:onsubmit 仅在检测到“返回 false”时才执行

    我不太明白怎么onsubmit return validate 作品 为什么我必须return功能 仅当它检测到时才起作用return false从声明中
  • 使用ffmpeg在iPhone上显示视频

    任何人都可以帮助我吗 我有这个API ret avRecvFrameData avIndex buf VIDEO BUF SIZE char frameInfo sizeof FRAMEINFO t frmNo 缓冲区将填充来自编解码器的视
  • MaxAllowedNumWorkers 是由什么决定的?

    我想要matlabpool open 24 由于我的机器中 NumWorkers 的默认值为 12 所以我run myCluster parcluster local myCluster NumWorkers 12 Modified pro
  • 将 Google 地图与 C++ 程序集成

    我正在用 C 语言制作一个基于人工智能的两点之间的最短距离查找器 我的编码已经完成并且工作正常 现在我想将它与 Google Maps Api 集成 我想在谷歌地图上以图形方式显示最短距离 与谷歌地图显示方向完全相同 我被困住了 找不到任何
  • 如何在 GAC 中注册 .NET DLL 文件?

    我做了一个 NET DLL文件 我想将其注册到GAC 我已经使用过这个命令Windows Server 2003命令提示符 C Path of dll gt gacutil i dllname dll gacutil is not reco
  • @Validated 服务无法自动装配自身

    如果 Service 类使用 Validated 注释进行注释 则同一类无法自动装配自身 Service Validated public class SomeService Autowired private SomeService so