Java 跨项目自动布线时钟导致';未找到此类Bean';例外
我的项目设置如下 如图所示,我有一个助手项目(有2个@Autowired时钟),我的主项目有1个@Autowired时钟。这三个钟都是同一个物体 启动应用程序时,会出现以下错误: org.springframework.beans.factory.unsatifiedDependencyException: 创建名为“helper2”的bean时出错:未满足依赖关系 通过“时钟”字段表示;嵌套异常是 org.springframework.beans.factory.noSuchBean定义异常:否 “java.time.Clock”类型的合格bean可用:至少应为 1个符合autowire候选资格的bean。依赖项批注: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.inject(AutoWiredNotationBeanPostProcessor.java:586) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]由以下原因引起: org.springframework.beans.factory.noSuchBean定义异常:否 “java.time.Clock”类型的合格bean可用:至少应为 1个符合autowire候选资格的bean。依赖项批注: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE]Java 跨项目自动布线时钟导致';未找到此类Bean';例外,java,spring,spring-boot,exception,autowired,Java,Spring,Spring Boot,Exception,Autowired,我的项目设置如下 如图所示,我有一个助手项目(有2个@Autowired时钟),我的主项目有1个@Autowired时钟。这三个钟都是同一个物体 启动应用程序时,会出现以下错误: org.springframework.beans.factory.unsatifiedDependencyException: 创建名为“helper2”的bean时出错:未满足依赖关系 通过“时钟”字段表示;嵌套异常是 org.springframework.beans.factory.noSuchBean定义异
您不能自动连接java.time.Clock,因为它不是Spring组件。spring组件是一个用于自动检测的类
我正在编辑我的回答,但@ptikobj似乎已经很好地回答了这个问题。我想补充一点,将
@SpringBootConfiguration
添加到类中而不是仅仅@Configuration
将处理组件扫描,因此不需要这样做。Spring需要一个java.time.Clock
实现的Bean定义,以便能够自动连接它。由于您已经将Clock.systemDefaultZone
的返回值公开为@Bean
,因此您只需将@Configuration
添加到MainConfig.java
中,并确保MainConfig
在Spring之前正确拾取,无论是通过@ComponentScan
还是@Import
,答案似乎不够全面,如果您愿意发布答案,请详细说明以帮助OP。您如何提供bean定义?通过.xml文件?正如我看到的,您有MainConfig.class
,其中定义了@Bean
,但在这种情况下,该类需要标记为@Configuration
。在MainConfig中,您将类型为clock和autowiring的Bean定义为类成员。你为什么需要@autowired clock?你有一个循环依赖项。谢谢Devdio。我没有使用xml文件。我已经用@Configuration标记了我的MainConfig,但是我得到了相同的错误。谢谢你的回复。我已从MainConfig中删除自动连线。MainConfig只有方法@Bean public Clock getClock(){return Clock.systemDefaultZone();}Helper2和Helper3具有自动连接的时钟注释。还是一样的错误。谢谢。我已将“配置”注释添加到MainConfig。我仍然会犯同样的错误。需要注意的是,“Bean not found”异常出现在导入到主项目中的依赖项项目的Helper2类中,而不是MainConfig类中。我将无法将MainConfig类“导入”或“组件扫描”到依赖项项目中,因为它将创建循环依赖项。是否有其他方法修复代码?不需要循环编译时依赖关系-假设您的@SpringBootApplication
也在“主springboot应用程序”中。只需将@Import(MainConfig.class)
添加到用@SpringBootApplication
注释的类中。谢谢你,我需要类Helper2和Helper3中的“时钟”。我是否应该删除这两个类中的@Autowired Clock声明?那么我如何从MainConfig访问时钟?无需从Helper2
和Helper3
中删除@Autowired clock
。Spring的Bean容器是一个运行时概念,因此不关心Helper2
和Helper3
是否具有对MainConfig
的编译时访问权限。您必须确保Helper1
、Helper2
、Helper3
和MainConfig
在相同的Spring应用程序上下文中,如果您没有更改Spring Boot的任何默认值,则它们处于相同的Spring应用程序上下文中。