ChatGPT解决这个技术问题 Extra ChatGPT

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

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

没有豆子?

https://i.stack.imgur.com/4cCFH.png

正如您在下面看到的,它通过了测试?所以它必须是Autowired?

https://i.stack.imgur.com/YFGln.png

IntelliJ 有时会给出误报自动装配错误。例如在 Spring Boot 应用程序中,很多配置隐藏在 EnableAutoConfiguration 后面。有一个未解决的问题。其他原因可能是 Spring facet 配置不正确。在这些情况下,我通常会降低检查的严重性,使其不那么突兀……
这个问题发生在我身上,因为我将 JUnit 4/Junit 5/Jupiter 混合用于我的 @Test 注释。将它们切换到 Jupiter 解决了自动连线错误。
我在 IntelliJ 2021.2.3 上,这仍在发生。
仍在发生 IntelliJ IDEA 2022.1(终极版)。相当令人沮丧。

A
Abimbola Esuruoso

在使用他们的 @SpringBootApplication 注释创建 Spring Boot 应用程序时,我遇到了同样的问题。此注解根据 spring reference 表示 @Configuration@EnableAutoConfiguration@ComponentScan

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

现在,如果这些错误对您造成如此大的困扰,那么请回到这三个单独的注释。否则,请忽略 Intellij ...您的依赖解析已正确配置,因为您的测试通过了。

总记得...

人永远大于机器。


我仍然在 2017.2 中获得它,它是最终许可证的付费版本。
对于 IntelliJ 的更新版本(例如 2017),您必须启用 Spring Data 插件,然后您就不需要上述任何解决方法。下面还有另一个答案告诉你如何做到这一点。
使用 IntelliJ 2018.2,使用 Spring Boot 2.0.5 和 @SpringBootApplication 我收到此错误。我遵循@Jaõs Matos 的建议,将 scanBasePackages 参数用于 @SpringBootApplication,并指定了应扫描的包/命名空间。
在 2020.3、Spring Boot 2.3.7、Kotlin 1.4.21 中相同,对于 @Autowired lateinit var embeddedKafka:EmbeddedKafkaBroker
同在这里,版本 2021.1.2 终极版
m
mkczyk

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

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

@Repository
public interface YourRepository ...
...

如果您使用带有扩展 Repository 类的 Spring Data,它将是冲突包。然后你必须直接指明包裹。

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


根据此youtrack.jetbrains.com/issue/IDEA-148113,它已在版本 16 中修复...(屏住呼吸)
@Component 似乎也可以工作。看起来只需要强制扫描接口/类
您不再需要添加@Repository。就在 Spring Data 插件上。
三年后又坏了
我将 /@Mapper 用于我的映射器接口(mybatis)。 IDEA 抛出这个警告。我将其更改为 /@Repository 警告消失了。
N
Natix

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

https://i.stack.imgur.com/pIdbk.png


这也为我解决了这个问题——对于那些正确设置代码的人来说,这似乎是真正的问题!
在 2017.2.7 中不起作用。插件已启用,但警告仍然存在。
在 iJ Ultimate 2018.2.5 中为我工作。
为 intellij idea Ultimate 2020 工作
即使启用插件后这也不起作用
J
João Matos

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

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

然而,正如已经提到的,@SpringBootApplication 注解替换了@ComponentScan,因此在这种情况下你必须这样做:

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

至少在我的情况下,Intellij 不再抱怨了。


这绝对是更好、更清洁的解决方案,并且可以确认这消除了警告。谢谢!
在我的情况下,我有 @SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"}),虽然应用程序运行良好,但 intellij 不喜欢它。更改为 @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"}) 已为我修复!
这是迄今为止最好的解决方案,因为它可以在 IDE 之间移植并清楚地传达开发人员的意图。
@GriffoGoes 的建议解决了我的问题,因为我使用的是多模块结构,这是我最好的解决方案
这应该是公认的答案。清楚地说明根本原因和解决方案。
c
cristianchiess

我总是通过以下方式解决这个问题。设置>检查> Spring Core>代码,而不是从错误转向警告严重性选项

https://i.stack.imgur.com/9c4Xw.jpg


我一直使用这个解决方案,直到在 Spring 上进行修复:youtrack.jetbrains.com/issue/IDEA-182912
在 IntelliJ 2021.3 中,此设置已重命名为 Incorrect injection point autowiring in Spring bean components
K
Kareem

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

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

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

这对我来说也“有效”,但随后 intellij 抱怨:Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration¯\_(ツ)_/¯
这是冗余声明:@SpringBootApplication 已应用 @EnableAutoConfiguration
y
yankae

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


我就是这种情况。确保我们在服务类中有“@Service”,在存储库类中有“@Repository”。
w
wired00

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

P
Paul Roub

配置应用程序上下文,一切都会好的。

https://i.stack.imgur.com/gg3BF.png


我在多模块项目中有一项服务,将 Spring Application Context 添加到有问题的模块中解决了这个问题
我认为就我而言,问题在于我在一个项目中有两个 @SpringBootApplication 注释(一个用于数据加载器,一个用于实际项目)。我按照您的建议明确定义了两个不同的应用程序上下文,正如您在屏幕截图中显示的那样,然后错误就消失了。谢谢!
在 Project setting -> Facets 中添加应用程序上下文文件很有用
v
vphilipnyc

您是否检查过您是否在服务实现之上使用了 @Service 注释?它对我有用。

import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserServices {}

J
Julian

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

例如:

@Component
@EnableAutoConfiguration  
public class ItemDataInitializer  {

    @Autowired
    private ItemReactiveRepository itemReactiveRepository;

    @Autowired
    private MongoOperations mongoOperations;
}

D
Devs love ZenUML

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

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

https://i.stack.imgur.com/NLiWU.png


R
Robert

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


我是如此绝望,我实际上尝试了这个:-) 我需要将 bean 添加到我的 CoreApplication 类
H
HankCa

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

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

这是有道理的,对我有用。为什么要关闭警告?警告应该按预期工作!
i
imal hasaranga perera

只要您的测试通过了,您就可以了,通过将光标移到错误上并在第一个项目的子菜单中点击 alt + enter,您会发现 Disable Inspection 选择


谢谢。顺便说一句,有没有办法在 IntelliJ 设置的一个视图中查看所有非默认更改(所以你知道你做了什么更改)?
m
malliaridis

简单你必须做2个步骤

将休眠核心依赖项更改@Autowired 添加到@Resource。

==>> change @Autowired to  @Resource

解释你的答案。
l
lmiguelvargasf

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

@SuppressWarnings("SpringJavaAutowiringInspection")

当自动装配到构造函数中时,它是 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
T
Tomáš Záluský

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

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


是的,在界面中添加 @Component 即可解决问题。但我认为这不是正确的方法......在我看来,这是 IntelliJ IDEA 中的一个错误,或者不是那么难 IntelliJ IDEA 还没有为更新的 Feign 版本做好准备。它在没有 @Component 的情况下在错误的 feign 版本中工作(其中 @FeignClient 注释在 org.springframework.cloud.netflix.feign 而不是 org.springframework.cloud.openfeign - 也许这是问题的原因?)。您是否为此找到了更多详细信息(可能是错误票)?
不,我没有,尽管我的案例(没有 @Component 无法工作)是来自 org.springframework.cloud.netflix.feign@FeignClient)包。
JetBrains 错误跟踪器的问题在这里:youtrack.jetbrains.com/issue/IDEA-168155
d
davidmpaz

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

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

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


s
sfwn

你需要做的是添加

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

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

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


@ComponentScan("package.include.your.annotation.component") !
K
K. Gol

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

@ContextConfiguration(classes = {...})

仅用于测试包!
D
Davel_AG

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

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

希望它可以帮助某人!


A
Anton Bondarenko

IntelliJ IDEA Ultimate

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

File -> Project Structure..

左侧:项目设置 -> 模块

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


等于UV答案
d
duyuanchao

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

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

添加 @ComponentScan 对我有用。谢谢你。我正在使用版本 2020.3.1
U
U.V.

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

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

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

SpringApplication上下文:

ExampleApplication.java

MissingBeanClass.java

etvoilà:错误信息消失了!


J
Jensen Buck

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

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


C
Christoph Grimmer-Dietrich

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

import org.jvnet.hk2.annotations.Service

代替

import org.springframework.stereotype.Service

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


s
smilyface

完成这项工作所需要做的就是以下代码:

@ComponentScan
public class PriceWatchTest{

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

S
Smart Coder

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


N
Nirbhay Rana

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