intellij错误地说没有findautowired存储库的types的bean

我创build了一个简单的unit testing,但IntelliJ不正确地将其突出显示为红色。 标记为错误

没有豆子?

在这里输入图像说明

正如你可以看到它通过testing? 所以它必须是Autowired?

在这里输入图像说明

使用@SpringBootApplication注释创buildSpring Boot应用程序时,我遇到了同样的问题。 根据spring引用 ,此注释表示@Configuration @EnableAutoConfiguration@ComponentScan @EnableAutoConfiguration@ComponentScan

正如所料,新的注释工作正常,我的应用程序运行平稳,但Intellij不断抱怨未实现的@Autowire依赖项。 只要我改回使用@Configuration @EnableAutoConfiguration@ComponentScan @EnableAutoConfiguration@ComponentScan @EnableAutoConfiguration ,错误就停止了。 看来Intellij 14.0.3 (也可能是更早的版本)还没有configuration为识别@SpringBootApplication注释。

现在,如果错误对您造成了很大的影响,那么请回到这三个单独的注释。 否则,忽略Intellij …您的依赖项parsing已正确configuration,因为您的testing通过。

总记得…

人总是比机器更大。

在资源库类中添加Spring注解@Repository

我知道它应该没有这个注释工作。 但是如果你添加这个,IntelliJ不会显示错误。

 @Repository public interface YourRepository ... ... 

如果你使用Spring Data扩展Repository类,它将是冲突pagkages。 那么你必须指出明确pagkages。

 import org.springframework.data.repository.Repository; ... @org.springframework.stereotype.Repository public interface YourRepository extends Repository<YourClass, Long> { ... } 

接下来,您可以自动assembly您的存储库而不会出错。

 @Autowired YourRepository yourRepository; 

这可能不是一个好的解决scheme(我想你试图注册两次存储)。 但为我工作,不要显示错误。

也许在新版本的IntelliJ中可以修复: https : //youtrack.jetbrains.com/issue/IDEA-137023

如果你不想改变你的代码只是为了让你的IDE快乐。 我已经通过将所有组件添加到Spring方面来解决这个问题。

  1. 创build一个名称为“服务,处理器和路由器”或您喜欢的任何名称的组;
  2. 删除并重新创build“Spring应用程序上下文”使用您以前创build的组作为父项。

在这里输入图像说明

我的IntelliJ IDEA Ultimate版本(2016.3.4 Build 163)似乎支持这一点。 诀窍是你需要启用Spring Data插件。

在这里输入图像说明

有时您需要指出@ComponentScan应扫描哪些组件。 你可以通过传递包作为这个注解的参数来做到这一点,例如:

 @ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"}) 

但是,如前所述,@SpringBootApplication注释会replace@ComponentScan,因此在这种情况下,您必须执行相同的操作:

 @SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"}) 

至less在我的情况下,Intellij停止抱怨。

最后一块重要信息 – 添加ComponentScan以便应用知道需要连线的东西。 这在这个问题的情况下是不相关的。 但是,如果没有@autowiring正在执行,那么这可能是您的解决scheme。

 @Configuration @ComponentScan(basePackages = { "some_package", }) public class someService { 

只要你的testing通过你是好的,击中alt + enter通过将光标放在错误,并在第一个项目的子菜单中,你会发现Disable Inspectionselect

@Component@configuration放在你的beanconfiguration文件中似乎是可行的,例如:

 @Configuration public class MyApplicationContext { @Bean public DirectoryScanner scanner() { return new WatchServiceDirectoryScanner("/tmp/myDir"); } } @Component public class MyApplicationContext { @Bean public DirectoryScanner scanner() { return new WatchServiceDirectoryScanner("/tmp/myDir"); } } 

这似乎仍然是在最新的IntelliJ中的错误,并与可能的caching问题?

如果将上面提到的@Repository注解添加为mk321,则保存,然后删除注释并再次保存,这将修复问题。

你需要做的是添加

@ComponentScan("package/include/your/annotation/component")AppConfiguration.java

由于我认为你的AppConfiguraion.java的包比你的注解组件(@Service,@Component …)的包更深

比如"package/include/your/annotation/component/deeper/config"

我的应用程序中有类似的问题。 当我添加注释不正确highliting消失。

 @ContextConfiguration(classes = {...}) 

我在我的spring启动应用程序中解决这个问题的方法是打开spring应用程序上下文,并手动为缺less的autowired bean添加类。

(通过“项目结构”菜单或popup工具窗口访问…编辑“Spring应用程序上下文”)

因此,SpringApplicationContext不包含我的ExampleApplication springconfiguration,而是包含了缺less的Bean:

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

etvoilà:错误消息消失了!

所有你需要做的工作是以下代码:

@ComponentScan public class PriceWatchTest {

 @Autowired private PriceWatchJpaRepository priceWatchJpaRepository; 

我也遇到过这个问题,并通过删除Spring Facet来解决它:

  • 文件 – >项目结构
  • select小Facets
  • 删除弹簧

祝你好运!