Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跨项目自动布线时钟导致';未找到此类Bean';例外_Java_Spring_Spring Boot_Exception_Autowired - Fatal编程技术网

Java 跨项目自动布线时钟导致';未找到此类Bean';例外

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定义异

我的项目设置如下

如图所示,我有一个助手项目(有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.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应用程序上下文中。