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

时间:2014-11-12 15:00:57

标签: java spring intellij-idea annotations autowired

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

没有豆子?

enter image description here

如下所示,它通过了测试?那么必须是Autowired?

enter image description here

40 个答案:

答案 0 :(得分:127)

使用$dbh->err注释创建 Spring Boot 应用程序时遇到了同样的问题。根据{{​​3}},此注释代表@SpringBootApplication@Configuration@EnableAutoConfiguration

正如预期的那样,新的注释工作正常,我的应用程序运行顺利,但 Intellij 一直抱怨未实现的@ComponentScan依赖项。我一改回使用@Autowire@Configuration@EnableAutoConfiguration,错误就会停止。似乎 Intellij 14.0.3 (很可能,早期版本)尚未配置为识别@ComponentScan注释。

现在,如果错误打扰你那么多,那么回到那三个单独的注释。否则,请忽略 Intellij ...您的依赖项解析已正确配置,因为您的测试通过了。

永远记住......

  

人永远比机器大。

答案 1 :(得分:41)

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

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

@Repository
public interface YourRepository ...
...

如果您将Spring Data与扩展Repository类一起使用,那将是冲突问题。然后你必须指出明确的pagkages。

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

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

接下来,您可以毫无错误地自动安装您的存储库。

@Autowired
YourRepository yourRepository;

这可能不是一个好的解决方案(我猜你试图两次登记repositorium)。但是为我工作并且不会显示错误。

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

答案 2 :(得分:21)

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

enter image description here

答案 3 :(得分:14)

有时您需要指明@ComponentScan应扫描组件的位置。您可以将包作为此批注的参数传递,例如:

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

但是,如前所述,@ SpringBootApplication注释取代了@ComponentScan,因此在这种情况下你必须这样做:

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

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

答案 4 :(得分:12)

我一直在解决这个问题。 设置&gt;检查&gt; Spring Core&gt;代码 ,而不是从错误转为警告严重性选项

enter image description here

答案 5 :(得分:12)

我使用的是spring-boot 2.0和intellij 2018.1.1终极版,我遇到了同样的问题。

我通过在主应用程序类

中放置@EnableAutoConfiguration来解决
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}

答案 6 :(得分:5)

在您的bean配置文件中放置from pprint import pprint import random rows = 3 cols = 3 virus = [0,0,0,0,0,1,2] first_gen = [[random.choice(virus) for _ in range(rows)] for _ in range(cols)] pprint (first_gen) @Component似乎有效,例如:

@configuration

答案 7 :(得分:4)

如果您不想对代码进行任何更改,只是为了让您的IDE感到满意。我已经通过将所有组件添加到Spring facet来解决它。

  1. 创建一个名称为&#34;服务,处理器和路由器&#34;或任何你喜欢的名字;
  2. 删除并重新创建&#34; Spring Application Context&#34;使用您之前创建的组作为父组。
  3. enter image description here

答案 8 :(得分:4)

只要您的测试通过即可,请点击alt + enter,将光标放在错误上,然后在第一项的子菜单中找到Disable Inspection选择

答案 9 :(得分:2)

您需要做的是添加

title中的

@ComponentScan("package/include/your/annotation/component")

由于我认为您的AppConfiguration.java包比更深而不是注释组件(@ Service,@ Component ...)的包,

,例如AppConfiguraion.java

答案 10 :(得分:2)

我的申请中遇到了类似的问题。 当我添加注释不正确的高位消失时。

@ContextConfiguration(classes = {...})

答案 11 :(得分:2)

最后一条重要信息 - 添加ComponentScan,以便应用知道需要连接的内容。这与此问题的情况无关。但是,如果根本没有执行@autowiring,那么这可能是您的解决方案。

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

答案 12 :(得分:2)

配置应用程序上下文,一切正常。

enter image description here

答案 13 :(得分:2)

我在IntelliJ v.14中使用此注释隐藏此错误:

@SuppressWarnings("SpringJavaAutowiringInspection")

答案 14 :(得分:2)

在课程级别将@EnableAutoConfiguration注释与@Component一起使用。它将解决此问题。

例如:

@Component
@EnableAutoConfiguration  
public class ItemDataInitializer  {

    @Autowired
    private ItemReactiveRepository itemReactiveRepository;

    @Autowired
    private MongoOperations mongoOperations;
}

答案 15 :(得分:2)

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

解决方案:用SomeClient注释接口@Component。 (在我们的示例中,我们不直接在@FeignClient上使用SomeClient批注,而是使用元注解@OurProjectFeignClient,将其注解为@FeignClient并向其中添加@Component注解它也一样。)

答案 16 :(得分:1)

IntelliJ IDEA Ultimate

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

File-> Project Structure..

左侧: 项目设置->模块

右侧:在包装结构中查找 Spring并添加+ Application.java

答案 17 :(得分:1)

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

将其设置为相同的结构级别后,错误消失

希望它可以帮助一些人!

答案 18 :(得分:1)

您是否检查过在服务实现的顶部使用了@services注释? 它对我有用。

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserServices {}

答案 19 :(得分:1)

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

答案 20 :(得分:1)

可以通过在Spring Boot应用程序主类上放置@EnableAutoConfiguration来解决。

答案 21 :(得分:1)

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

答案 22 :(得分:1)

作为 IntelliJ (IDE) 和开发环境之间的大多数同步错误。

特别是如果您有自动化测试或构建一直通过绿色。

使缓存无效并重新启动解决了我的问题。

答案 23 :(得分:1)

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

@ComponentScan
public class PriceWatchTest{

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

答案 24 :(得分:1)

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

如果将@Repository注释添加为上面提到的mk321,请保存,然后删除注释并再次保存,这样可以解决问题。

答案 25 :(得分:0)

将注释@Service添加到您的存储库类中,它应该可以工作。

答案 26 :(得分:0)

只需在POJO中添加以下两个注释即可。

@ComponentScan
@Configuration
public class YourClass {
    //TODO
}

答案 27 :(得分:0)

在我的情况下,我的班级文件夹地址错误,请检查您的班级包装是否正确。

答案 28 :(得分:0)

我遇到了同样的问题,并使用“文件”菜单下的“无效缓存...”解决了它。

答案 29 :(得分:0)

我有一个 ServerService.java 类。由于存在此问题,因此未将其分配为 @Bean

@SpringBootApplication
public class HelloServerApplication {

public static void main(String[] args) {
    SpringApplication.run(HelloServerApplication.class, args);
}
@Bean
public ServerService getServerService() {
    return new ServerService();
 }
}

为了在 spring 框架中创建 bean 并将其注入类,Class 应在类级别相应地标记为 @Componet、@Service 或 @Repository。确保您使用过它。

答案 30 :(得分:0)

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

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

答案 31 :(得分:0)

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

答案 32 :(得分:0)

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

答案 33 :(得分:0)

使用@AutoConfigureMockMvc作为测试类。

答案 34 :(得分:0)

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

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


import ...

@Service
class ServiceX {

  ...

}

答案 35 :(得分:0)

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

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

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

或选择Eclipse:)

答案 36 :(得分:0)

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

import org.jvnet.hk2.annotations.Service

代替

import org.springframework.stereotype.Service
通过盲目接受Idea的建议进口中的第一选择。第一次发生时花了我几分钟:-)

答案 37 :(得分:0)

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

(通过Project Structure菜单或弹簧工具窗口访问...编辑“Spring Application Context”)

因此,仅包含我的ExampleApplication spring配置的SpringApplicationContext,它还包含缺少的Bean:

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

etvoilà:错误消息消失了!

答案 38 :(得分:-1)

以我为例,我将 @Autowired 更改为 @Resource ,并且错误的提示消失了

答案 39 :(得分:-12)

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

  • 文件 - &gt;项目结构
  • 选择Facets
  • 删除Spring
祝你好运!