124

当我在类中使用 Spring 的@Autowired注释时,IntelliJ IDEA 显示错误,但该类运行没有任何问题。

这是此错误消息:

自动装配的成员必须在有效的 spring bean 中定义(@Component/@Service 等) 更少... (Ctrl+F1) 检查 bean 类中的自动装配问题。

4

28 回答 28

35

我在 IntelliJ IDEA 13.1.4 上遇到了同样的问题,我通过删除 Spring facet(文件->项目结构)并让它只显示“检测”来解决它。

于 2015-01-19T17:25:56.833 回答
31

我通过添加抑制警告来修复它:

 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Autowired
 private ....
于 2018-08-02T00:07:05.097 回答
24

如果您知道 bean 存在并且它只是检查的问题,那么只需在变量声明之前添加以下内容:

@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;

有时,如果已声明 bean,则 IntelliJ 无法解析,例如,当有条件地包含 bean 并且条件解析在运行时动态发生时。在这种情况下,IntelliJ 的静态代码分析器似乎无法检测到 bean。

于 2016-04-21T11:11:23.257 回答
21

这里有同样的错误!

似乎 Intellij 无法验证类实现是 @Service 还是 @Component。

解决它只是从错误更改为警告(按 Alt + Enter)。

于 2014-08-14T20:26:56.183 回答
19

从所有项目模块中删除 .iml 文件,然后转到 File -> Invalidate Caches/Restart

于 2015-07-15T08:13:43.320 回答
14

文件 -> ProjectStructure -> 模块 -> +(在中央列) -> 弹簧 -> 确定

于 2016-08-11T08:48:14.353 回答
6

我有同样的问题。我通过为每个相关模块添加 Spring facet(文件->项目结构)来解决它,然后添加配置文件。对于某些项目(spring mvc),会自动检测到配置文件。但是,对于 jar 项目,我必须手动添加配置文件。

于 2015-06-26T15:44:40.037 回答
5

通过转到 File >> Project Structure >> Facets 然后将所有配置文件添加到 Spring Facet 解决了这个问题。之后,它开始检测 bean 所在的文件并能够对问题进行排序。IntelliJ 提供此检查非常有价值,恕我直言,不应禁用。

于 2018-05-10T07:33:24.657 回答
4

确保您的 Spring bean 定义正确。有时,应用程序工作正常,它只是在 IDE 中显示错误,如果您定义了 Spring facet,请检查您的项目“iml”文件。

于 2014-01-24T02:44:57.840 回答
4

我有同样的问题。

在此处输入图像描述

而且我认为修复它的正确方法是告诉 Intellij 找到正确的 Spring Context,而不是“抑制警告”。

简而言之,File -> ProjectStructure(⌘;) -> Modules -> (选择模块) -> Spring -> (点击'+'添加上下文) -> OK

在此处输入图像描述

添加上下文文件:

在此处输入图像描述

完毕!

在此处输入图像描述

于 2021-10-03T22:42:12.213 回答
3

我可能有点晚了,但是在花了几个小时研究这个问题之后。

我发现在最新版本的IntelliJ 2020中,@AutoWired 是可选的,基于构造函数的依赖注入更可取。

我通过简单地从 Service 和 Controller 类中删除@AutoWired Annotation 并使用基于构造函数的依赖注入来解决了这个问题。

链接可能会有所帮助。

快乐编码!

于 2020-07-20T17:38:19.110 回答
2

确保您的 IntelliJ Idea (IDE) 了解正在检查您的模块的所有必要弹簧配置。

你可以在下面检查这个

文件 > 项目结构 > 模块 > [您在右侧面板中的项目名称] > Spring

有时,我们需要明确告诉 IDE spring 配置来自依赖项(项目类路径中存在的 jar)

于 2016-06-04T12:17:17.843 回答
2

这似乎是可见性问题 - 父控制器看不到您尝试连接的组件。

尝试添加

@ComponentScan("path to respective Component") 

到父控制器。

于 2015-10-26T23:07:28.733 回答
1

我遇到了同样的问题。我的原因是包含自动装配引用的 bean 不是 Spring 组件(它是 EJB),而是有一个 SpringBeanAutowiringInterceptor 拦截器允许使用自动装配。我认为 Intellij 在其自动装配检查中不考虑这种可能性。

于 2014-03-05T10:44:22.603 回答
1

我也有这个问题。执行alt+enter然后要求在受影响的行上重新运行或禁用 Spring 检查来修复它。这似乎只是在 13.4 更新后才成为问题。

于 2014-07-30T17:29:40.220 回答
1

你应该检查你是否在课堂上添加了@Component、@Repository 或类似的东西

于 2017-02-09T12:26:39.790 回答
1

我的原因是没有在我的 CrudRepository 界面上添加@Repository,我正在观看的教程没有在 STS 上添加它并且它没有抱怨。

于 2016-04-29T09:36:37.690 回答
1

就我而言,我错过了在 web.xml 中编写的内容:

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:applicationContext.xml</param-value>
   </context-param>

并在应用程序上下文文件中:

<context:component-scan base-package=[your package name] />

添加此标签并运行 maven 以重建项目后 intellj desapears 中的自动装配错误和 bean 图标出现在左边距: 在此处输入图像描述

于 2016-02-01T02:14:28.913 回答
1

我知道这是一个老问题,但我没有遇到任何可以为我解决这个问题的答案,所以我会提供我的解决方案。

注意:我认为问题可能是this,但我的问题与两次实现相同的接口无关。使用@Qualitier确实让我的问题消失了,但它是绷带而不是适当的解决方案,所以我没有解决这个问题。

背景

我的任务是维护一个旧项目,该项目经历了不同版本的 spring 并且仅针对单独的模块进行了更新,因此至少可以说需要重构。我最初遇到了重复的 bean 问题,并且在 OP 的问题和重复的 bean 问题之间来回修改问题,即使只有一个 bean;导航到重复的 bean 总是去同一个类。

问题

该问题出现在一个类@Repository中,该类中也有注释。我注意到我还有一个在基础包上做的弹簧,我相信这是旧版本 Spring 中的原始方法。我正在通过在一个支持项目中使用旧分支和新分支的一部分来创建一个新分支,该支持项目用于多年来开发的不同项目,这就是为什么会有这样的混合搭配的方法论。@Autowired@Service@ComponentScanapplication-config.xmlcontext:component-scan

简单的解决方案

@ComponentScan由于已经实施了更现代的使用方法,因此我只是删除了application-config.xml该问题并解决了问题。

于 2019-10-17T19:05:04.457 回答
1

有点晚了,但我希望它对其他人有帮助。

确保将@Service 放在服务的实现类上

@Service
public class ServiceNameImpl implements ServiceName {

    @Override
    public void method(ObjectType paramName) {
        //CODE
    }

}

这就是我修复错误的方式。

于 2019-03-29T19:53:18.717 回答
0

我解决了添加 Web 方面的问题。

于 2014-12-09T04:50:30.857 回答
0

对于那些使用 IDEA 的人,您可以简单地删除那些您知道的警告。

在mac中,将你的诅咒移动到红色波浪线,按option+enter(Windows下alt+enter),你会看到建议:

在此处输入图像描述

试试看,你会看到自动添加的SuppressWarnings

记住,option+enter总是给出好的解决方案。

于 2021-10-08T07:01:19.357 回答
0

我已经通过这种方式解决了这个问题。在 IntelliJ 中,你所有的包都应该在一个子包中,它是 main/java 的子包。例如,我已将所有包放在 src/main/java/com.misisol.watchStore/ 下,然后 spring 可以找到我的 bean。

于 2018-02-24T14:13:52.630 回答
0

我有类似的问题。我通过取消选中“处理显式注释的bean”选项来解决它(见下面的截图)。这个选项在 linux 上默认是启用的。现在 @Service 和 @Configurations 注释是可见的。 截屏

于 2018-03-11T23:43:00.747 回答
0
eg1:
director:Settings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class 
operate:checkout 勾去掉
eg2:
1.impl class add @service
like this:
@Service
public class CityServiceImpl implements CityService{
@Autowired
private CityDao cityDao;

like this
2.dao file class add @Repository
@Repository
public interface CityDao {
于 2017-09-28T10:27:45.207 回答
0

使用@Qualifier 注入 Bean 为我解决了这个问题。

于 2018-03-11T07:48:35.263 回答
0

我只有一个使用基于构造函数的依赖注入和 2019.2.4 版本的 IntelliJ 的服务遇到了这个问题。我发现更改服务名称(shift + f6)然后丢弃 git 级别的更改很有帮助。

于 2020-08-08T10:05:26.800 回答
0

以下对我有用:

  1. 找到所有实现给出错误的服务(接口)的类。
  2. 使用 @Service 注释标记每个类,以将它们指示为业务逻辑类。
  3. 重建项目。
于 2020-03-25T09:53:34.730 回答