Intellij错误地表示没有为自动连接存储库找到类型的bean

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

没有豆子?

enter image description here

如你所见,它通过了测试?所以它一定是自动连接的?

enter image description here

435792 次浏览

我在使用@SpringBootApplication注释创建春天的引导应用程序时也遇到了同样的问题。该注释根据春天的参考表示@Configuration@EnableAutoConfiguration@ComponentScan

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

现在,如果错误对您的影响如此之大,那么就恢复到那三个单独的注释。否则,忽略Intellij…您的依赖项解析配置正确,因为您的测试通过了。

永远记得……

人永远比机器伟大。

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

  • File ->项目结构
  • 选择Facets
  • 拆卸弹簧

好运!

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

我知道没有这个注释它也能工作。但是如果添加了这个,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

我在spring引导应用程序中解决这个问题的方法是打开spring应用程序上下文,并手动为缺失的自动连接bean添加类!

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

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

SpringApplicationContext:

  • ExampleApplication.java
  • MissingBeanClass.java

et voilà:错误信息消失!

在bean配置文件中放入@Component@configuration似乎可以工作,例如:

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

最后一个重要的信息-添加ComponentScan,以便应用程序知道它需要连接的东西。这与这个问题无关。然而,如果根本没有执行@autowiring,那么这可能是您的解决方案。

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

如果你不想对你的代码做任何改变,只是为了让你的IDE满意。我通过将所有组件添加到Spring facet解决了这个问题。

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

enter image description here

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

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

你需要做的就是添加

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

因为我认为你的AppConfiguraion.java的包是更深层次的,而不是你的注释组件(@Service, @Component…)的包,

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

我的申请中也有类似的问题。 当我添加注释时,不正确的高亮显示消失
@ContextConfiguration(classes = {...})

有时需要指明@ComponentScan应该在哪里扫描组件。你可以通过将包作为这个注释的参数来实现,例如:

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

然而,正如前面提到的,@SpringBootApplication注释替换了@ComponentScan,因此在这种情况下,你必须做同样的事情:

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

至少在我的案例中,Intellij停止了抱怨。

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

enter image description here

只要你的测试通过了,你是好的,点击alt + enter,将光标移到错误上,在第一项的子菜单中,你会发现Disable Inspection选择它

你所需要做的是让这个工作是以下代码:

@ComponentScan
public class PriceWatchTest{


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

我使用这个注释来隐藏这个错误,当它出现在IntelliJ v.14:

@SuppressWarnings("SpringJavaAutowiringInspection")

我总是用以下方法来解决这个问题。 检查设置> >春季>核心代码则将错误级别选项转换为警告级别选项

enter image description here

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

我通过在主应用程序类中放置@EnableAutoConfiguration来解决这个问题

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

有时——就我而言——原因是一个错误的输入。我不小心导入了

import org.jvnet.hk2.annotations.Service

而不是

import org.springframework.stereotype.Service

盲目地接受Idea建议的导入中的第一个选择。第一次发生的时候我花了几分钟:-)

我在Spring Boot应用程序中有类似的问题。应用程序利用了Feign (HTTP客户端从带注释的接口合成请求)。使用@FeignClient注释接口SomeClient, Feign生成实现此接口的运行时代理类。当一些Spring组件试图自动装配类型为SomeClient的bean时,Idea会抱怨没有找到类型为SomeClient的bean,因为在项目中没有真正的类存在,并且Idea没有被教导以任何方式理解@FeignClient注释。

解决方案:用@Component注解接口SomeClient。(在本例中,我们没有直接在SomeClient上使用@FeignClient注释,而是使用带有@FeignClient注释的元注释@OurProjectFeignClient,并向其添加@Component注释也可以工作。)

我只能使用@EnableAutoConfiguration来解决它,但是这个错误没有功能上的影响。

这个问题可以通过在spring引导应用程序主类上放置@EnableAutoConfiguration来解决。

对我来说,解决方案是将@EnableAutoConfiguration放在应用程序类的@SpringBootApplication下,它将下划线,因为它是多余的。删除它,瞧,所有关于丢失豆子的警告都消失了!傻春……

令人惊讶的是,一个在Eclipse中成功运行的面向佯装的项目不能在InteliJ中运行。 当启动应用程序时,InteliJ抱怨我试图注入到serviceImpl层的Feign客户端说: 字段personRestClient(我的虚拟客户端)在…需要一个豆子类型…但没有找到。 考虑定义一个‘....’类型的bean

我浪费了很长时间试图弄清楚是怎么回事。 我发现了一个解决方案(InteliJ),我不完全理解:

  1. Alt Shift F10(或运行菜单)
  2. 选择“编辑配置”
  3. 在配置窗口中,选中复选框“include dependencies with” 李“提供”范围的< / >
  4. 运行应用程序

或者选择Eclipse:)

检查bean的包是否正确编写

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




import ...


@Service
class ServiceX {


...


}

使用@AutoConfigureMockMvc作为测试类。

检查您是否在服务类中遗漏了@Service注释,我就是这种情况。

在我的情况下,我试图@Autowired的目录不在同一级别,

将其设置在同一结构层后,错误消失了

希望对大家有所帮助!

配置应用程序上下文就可以了。

enter image description here

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

简单,你只需要做2步

  1. 添加休眠内核依赖项
  2. @Autowired改为@Resource
==>> change @Autowired to  @Resource

IntelliJ IDEA Ultimate

将您的主类添加到IntelliJ Spring应用程序上下文中,例如Application.java

__abc0 -> __abc1

< p >左侧: 项目设置->模块

右边:在你的包结构中找到 Spring和添加+ Application.java

你检查过你在你的服务实现上使用了@Service注释吗?

import org.springframework.stereotype.Service;


@Service
public class UserServiceImpl implements UserServices {}

在我的情况下,我的类文件夹在错误的地址,所以检查你的类是否在正确的包中。

在类级别使用@EnableAutoConfiguration注释和@Component。它将解决这个问题。

例如:

@Component
@EnableAutoConfiguration
public class ItemDataInitializer  {


@Autowired
private ItemReactiveRepository itemReactiveRepository;


@Autowired
private MongoOperations mongoOperations;
}

只需添加以下两个注释到您的POJO。

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

将注释@Service添加到Repository类中,它应该可以工作。

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

特别是如果您有自动测试或构建,通过绿色始终。

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

我有同样的问题,并解决了它使用&;无效缓存…在文件菜单下。

我有一个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();
}
}

为了创建bean并在spring框架中注入它的类,Class应该在类级别上相应地标记为@组件,@服务或@存储库。确保你用过它。

我有这个问题。只使用

@SpringBootTest


@AutoConfigureMockMvc

带有测试类的注释。

我删除了这段代码。不再有错误

enter image description here


其他检查方法: 将@Service注释添加到你的Repository类中,它应该可以工作

至于intelliJ 2021.2.3版(终极版),我把“spring bean组件中的不正确注入点自动装配”改为警告,这对我来说是有效的__abc0

@Autowired(required = false) 将intellij关闭

这和另一种“不能自动装配”的情况是不一样的。没有豆子的……可以通过安装插件来解决,在我的情况下是Spring Batch的JobBuilderFactory。

enter image description here

我已经将我的Intellij IDEA版本更新到2022.2.3,如下所示:

IntelliJ IDEA 2022.2.3(终极版)

构建# IU-222.4345.14

运行时版本:17.0.4.1+7-b469.62 aarch64

它解决了我的问题。

看起来你正在试图运行你的测试,而没有真正激活你的WebEnvironment

解决方案非常简单,只需添加带有必需配置的@SpringBootTest注释。

这里有一个例子:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) // Run the server for testing.
public class mockTest {


@Autowired
// Should work now
}