intellij错误地说没有为自动装配库找到类型的bean


138

我创建了一个简单的单元测试,但是IntelliJ错误地将其突出显示为红色。将其标记为错误

没有豆吗

在此处输入图片说明

如您所见,它通过了测试?所以必须自动接线吗?

在此处输入图片说明


3
IntelliJ有时会给出错误的肯定自动接线错误。例如,在Spring Boot应用程序中,其中很多配置都隐藏在EnableAutoConfiguration后面。有一个未解决的问题。其他原因可能是Spring facet配置错误。在这种情况下,我通常要做的就是降低检查的严厉程度,以减少干扰...
Bohuslav Burghardt 2014年

Answers:


177

使用它们的注释创建Spring Boot应用程序时,我遇到了同样的问题@SpringBootApplication。该注释表示@Configuration@EnableAutoConfiguration并且@ComponentScan根据弹簧的参考

正如预期的那样,新注释正常工作,我的应用程序运行平稳,但是Intellij一直抱怨未实现的@Autowire依赖关系。当我改回使用@Configuration@EnableAutoConfiguration@ComponentScan单独的错误停止。看来Intellij 14.0.3(很可能还有早期版本)尚未配置为识别@SpringBootApplication注释。

现在,如果错误对您的影响如此之大,请恢复为这三个单独的注释。否则,请忽略Intellij ...由于测试通过,因此您的依赖关系解析已正确配置。

总记得...

人永远大于机器。


1
这个问题用的IntelliJ的新版本,现在固定的(在2017.1选中)
Sourabh

45
我仍然在2017.2上得到它,这是最终许可证的已付费用。
托马斯·卡莱尔

1
根据Spring Cloud Stream测试示例,我使用2017.2和SprintBootTest外部类以及SpringBootApplication静态内部类来获取它:docs.spring.io/spring-cloud-stream/docs/current/reference/html/…–
danebez

4
对于IntelliJ的最新版本(例如2017),您必须启用Spring Data插件,然后不需要上述任何解决方法。下面还有另一个答案,告诉您如何执行此操作。
诺伯特

4
使用IntelliJ 2018.2,使用Spring Boot 2.0.5,@SpringBootApplication我收到此错误。我通过使用@ scanBasePackages参数来@SpringBootApplication指定@JaõsMatos的建议,并指定了应扫描的包/名称空间。
戴夫·古德希尔

53

@Repository在存储库类上添加Spring注释。

我知道没有此注释也可以使用。但是,如果添加此选项,IntelliJ将不会显示错误。

@Repository
public interface YourRepository ...
...

如果您将Spring Data与扩展Repository类一起使用,则将成为冲突页面。然后,您必须指明显式的分页符。

import org.springframework.data.repository.Repository;
...

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

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

@Autowired
YourRepository yourRepository;

这可能不是一个好的解决方案(我想您正在尝试两次注册存储库)。但是为我工作,不要显示错误。

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


3
根据此youtrack.jetbrains.com/issue/IDEA-148113,它已固定在版本16中...(屏住呼吸)
ismoore999 '16

@Component似乎也起作用。看起来只需要强制扫描接口/类
Brett

您不再需要添加@Repository。仅在Spring Data插件上。
Shin Kim

3
三年后,它又被打破了
garyM

我将/ @ Mapper用于我的映射器界面(mybatis)。IDEA发出此警告。我将其更改为/ @ Repository,警告消失了。
bzuo

32

我的IntelliJ IDEA Ultimate版本(2016.3.4 Build 163)似乎支持此功能。诀窍是您需要启用Spring Data插件。

在此处输入图片说明


这也为我解决了这个问题-对于任何其他正确设置了代码的人来说,这似乎是真正的问题!
马祖(Matsu Q)

5
在2017.2.7中不起作用。插件已启用,但警告仍然存在。
brainfrozen

在iJ Ultimate 2018.2.5中为我工作。
JL_SO

23

有时您需要指出@ComponentScan应该在哪里扫描组件。您可以通过将软件包作为此批注的参数来传递,例如:

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

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

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

至少就我而言,Intellij不再抱怨。


2
这绝对是更好,更清洁的解决方案,并且可以确认这消除了警告。谢谢!
戴夫·古德希尔

2
就我而言@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}) ,尽管该应用程序运行良好,但intellij不喜欢它。改变@SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})为我固定!
GriffoGoes

1
到目前为止,这是最好的解决方案,因为它可以在IDE之间移植,并且可以清晰地传达开发人员的意图。
MusikPolice19年

我正在使用Ultimate 2019.3.1 Spring Boot 2.2.1和Java 11.0.4。该问题仍然存在于单元测试文件中。
garyM

1
@GriffoGoes提出的建议解决了我的问题,因为我使用的是多模块结构,所以这是我最好的解决方案
Juan Monsalve,


15

我正在使用spring-boot 2.0和intellij 2018.1.1 Ultimate Edition,我遇到了同样的问题。

我通过将@EnableAutoConfiguration放在主应用程序类中来解决

@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}

13
这对我也“有效”,但是随后intellij抱怨:Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration ¯\ _(ツ)_ / ¯–
Michael

6

检查您是否在服务类中错过了@Service批注,对我来说就是这种情况。


5

@Component@configuration放入您的Bean配置文件中似乎可以正常工作,例如:

@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");
    }
}

4

如果您不想对代码进行任何更改,只是为了使您的IDE满意即可。我已经通过将所有组件添加到Spring构面中解决了该问题。

  1. 创建一个名称为“服务,处理器和路由器”或您喜欢的任何名称的组;
  2. 使用先前创建的组作为父级,删除并重新创建“ Spring Application Context”。

在此处输入图片说明


4

只要您的测试通过,您就可以alt + enter通过将光标移到错误上并在第一项的子菜单中找到目标来进行Disable Inspection选择


谢谢。顺便说一句,有没有办法在IntelliJ设置的一个视图中查看所有不是默认的更改(所以您知道更改的内容)?
powder366

3

我在Spring Boot应用程序中有类似的问题。该应用程序利用Feign(HTTP客户端合成来自带注释的接口的请求)。SomeClient用注释接口后@FeignClient,Feign会生成实现此接口的运行时代理类。当某个Spring组件尝试自动连接type的bean时SomeClient,Idea抱怨没有SomeClient找到类型的bean,因为在项目中实际上不存在任何实际的类,并且Idea并未以@FeignClient任何方式被教导来理解注释。

解决方案:注释界面SomeClient@Component。(在我们的例子中,我们不直接使用@FeignClient注解SomeClient,而是使用带@OurProjectFeignClient注解的元注解,@FeignClient并且向其添加@Component注解也可以使用。)


是的,添加@Component到界面可以解决此问题。但是我认为这不是正确的方法……我认为这是IntelliJ IDEA中的一个错误,或者说不太难,IntelliJ IDEA尚未为较新的Feign版本做好准备。它可以@Component在不正确的伪装版本中使用(在其中使用@FeignClient注解org.springframework.cloud.netflix.feign而不是org.springframework.cloud.openfeign-可能是造成此问题的原因?)。您是否找到了其他详细信息(可能是故障单)?
约瑟夫·里卡特

不,我没有,尽管我的情况(没有不能使用@Component@FeignClient来自org.springframework.cloud.netflix.feign)包。
托马什Záluský

3
JetBrains错误跟踪器的问题在这里:youtrack.jetbrains.com/issue/IDEA-168155
Josef Reichardt


2

最后一条重要信息-添加,ComponentScan以便应用程序知道需要连接的东西。这与该问题无关。但是,如果根本@autowiring不执行任何操作,则可能是您的解决方案。

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

这是有道理的,并且对我有用。为什么要关闭警告?警告应按预期工作!
WebComer

2

您需要做的就是添加

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

由于我认为您AppConfiguraion.java的软件包比注释组件(@ Service,@ Component ...)的软件包更深

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


@ComponentScan(“ package.include.your.annotation.component”)!
Iakov Senatov

2

我的应用程序中有一个类似的问题。当我添加注释时,不正确的突出显示消失了。

@ContextConfiguration(classes = {...})

仅用于测试包!
Iakov Senatov

2

当它出现在IntelliJ v.14中时,我正在使用此注释隐藏此错误:

@SuppressWarnings("SpringJavaAutowiringInspection")

当自动装配到构造函数中时,它是@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Loren

2

对我来说,解决方案是将其放在@EnableAutoConfigurationApplication类下@SpringBootApplication,因为它有多余,所以要在其下划线。删除它,瞧所有关于缺少豆子的警告都消失了!傻春...


2

就我而言,我尝试@Autowired的目录不在同一级别,

在相同的结构级别上进行设置后,错误消失了

希望它可以帮助一些人!


1

我在spring boot应用程序中解决此问题的方法是打开spring应用程序上下文并手动添加缺少的自动装配bean的类!

(通过“项目结构”菜单或Spring工具窗口访问...编辑“ Spring Application Context”)

因此,除了包含我的ExampleApplication spring配置的SpringApplicationContext之外,它还包含缺少的Bean:

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

等:错误消息消失了!


1

这似乎仍然是最新IntelliJ中的错误,并且与可能的缓存问题有关?

如果将@Repository批注添加为上述的mk321,请保存,然后删除批注并再次保存,这可以解决此问题。


1

您需要做的就是以下代码:

@ComponentScan
public class PriceWatchTest{

    @Autowired
    private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}

1

我只需要使用@EnableAutoConfiguration来解决它,但是此错误不会对功能产生影响。



0

有时-在我的情况下-原因是错误的导入。我不小心输入了

import org.jvnet.hk2.annotations.Service

代替

import org.springframework.stereotype.Service

通过盲目接受Idea的建议进口商品中的第一选择。第一次发生时花了我几分钟:-)


0

令人惊讶的是,一个成功地与Eclipse一起运行的面向Feign的项目无法在InteliJ中运行。启动应用程序时,InteliJ抱怨我尝试向serviceImpl层注入的Feign客户端说:...中的field personRestClient(我的Feign客户端)需要类型...找不到的bean。考虑在配置中定义类型为'....'的bean。

我浪费了很长时间试图了解问题所在。我找到了一个我不完全理解的解决方案(针对InteliJ):

  1. Alt Shift F10(或运行菜单)
  2. 选择“编辑配置”
  3. 在配置窗口中,选中复选框“包括具有“已提供”作用域的依赖项”
  4. 运行你的应用程序

或选择Eclipse :)


0

检查您的bean软件包是否正确编写

//Check if this is written right 
package com.package1.package2.package3


import ...

@Service
class ServiceX {

  ...

}


0

我通过在IDEA中安装mybatis插件解决了该问题。当我安装Mybatis插件时,它消失了。


0

简单,您必须执行2个步骤

  1. 添加休眠核心依赖关系
  2. 将@Autowired更改为@Resource。
==>> change @Autowired to  @Resource

解释你的答案。
mentallurg

0

IntelliJ IDEA旗舰版

将您的主类添加到IntelliJ Spring Application Context中,例如Application.java

File -> Project Structure..

左侧:项目设置->模块

右侧:找到您的包装结构 Spring并添加+ Application.java


它等于UV的答案
Anton Bondarenko
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.