IntelliJ IDEA在使用Spring的@Autowired注释时显示错误

时间:2014-01-24 02:28:49

标签: spring spring-mvc intellij-idea warnings intellij-inspections

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

以下是此错误消息:

  

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

26 个答案:

答案 0 :(得分:28)

我在IntelliJ IDEA 13.1.4中遇到了同样的问题 我通过删除Spring facet(File-> Project Structure)并将其留给显示“Detection”来解决它。

答案 1 :(得分:17)

在这里得到同样的错误!

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

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

答案 2 :(得分:17)

从您的所有项目模块中删除.iml文件,然后转到文件 - >使高速缓存/重新启动无效

答案 3 :(得分:16)

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

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

有时,如果声明了bean,IntelliJ无法解析,例如,当有条件地包含bean并且在运行时发生条件解析时。

答案 4 :(得分:13)

档案 - > ProjectStructure - >模块 - > +(在中间栏中) - >春天 - >好的

答案 5 :(得分:9)

我通过添加强制警告来解决它:

std::chrono::milliseconds   duration</*signed integer type of at least 45 bits*/, std::milli>

答案 6 :(得分:5)

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

答案 7 :(得分:4)

确保您的Spring bean定义正确无误。有时候,应用程序运行正常,只是在IDE中显示错误,如果你定义了Spring facet,请检查你的项目'iml'文件。

答案 8 :(得分:2)

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

答案 9 :(得分:2)

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

您可以在

下查看
  

档案&gt;项目结构&gt;模块&gt; [右侧面板中的项目名称]&gt;春天

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

您应该检查是否在类

上添加了@ Component,@ Repository或类似内容

答案 12 :(得分:1)

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

答案 13 :(得分:1)

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

尝试添加

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
....
}

到父控制器。

答案 14 :(得分:1)

我也有这个问题。 执行 alt + 输入然后要求重新运行或禁用受影响线上的弹簧检查修复它。 在13.4更新之后,这似乎只是一个问题。

答案 15 :(得分:0)

就我而言,我错过了在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图标出现在左边距中: enter image description here

答案 16 :(得分: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 {

答案 17 :(得分:0)

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

答案 18 :(得分:0)

使用@Qualifier注入Bean解决了我的问题。

答案 19 :(得分:0)

我有类似的问题。我通过取消选中“Process explicit annotated beans”选项解决了这个问题(见下面的截图)。默认情况下,在linux上启用此选项。 现在可以看到@Service和@Configurations注释。 screenshot

答案 20 :(得分:0)

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

答案 21 :(得分:0)

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

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

@Service
public class ServiceNameImpl implements ServiceName {

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

}

这就是我解决错误的方法。

答案 22 :(得分:0)

我知道这是一个古老的问题,但是我没有找到能为我解决该问题的任何答案,因此我将提供解决方案。

注意:我认为问题可能是this,但是我的问题与两次实现相同的接口无关。使用@Qualitier确实使我的问题消除了,但这是一个绷带,而不是一个适当的解决方案,因此我对此并不满意。

背景

我的任务是维护一个旧项目,该项目经历了不同版本的spring,并且仅针对单独的模块进行了更新,因此至少需要重构。我最初得到了重复的bean问题,并且进行了一些修补工作,即使在只有一个bean的情况下,OP的问题和重复的bean问题之间的来回变化也使问题反复发生。导航到重复的bean总是去同一个类。

问题

此问题存在于@Repository类的@Autowired类的@Service类中,该类也具有@ComponentScan批注。我注意到我也有一个弹簧application-config.xml,它在基础包上做着context:component-scan,我相信这是旧版本Spring中的原始方法。我正在通过在一个支持项目中同时使用旧分支和较新分支的一部分来创建新分支,该支持项目用于几年来开发的不同项目中,这就是为什么存在这种混合搭配的原因方法论。

简单的解决方案

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

答案 23 :(得分:0)

以下内容对我有用:

  1. 找到实现提供错误的服务(接口)的所有类。
  2. 用@Service批注标记每个类,以将它们指示为业务逻辑类。
  3. 重建项目。

答案 24 :(得分:0)

我可能会迟到一些,但是花了几个小时并研究了这个问题。

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

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

link可能会有帮助。

快乐编码!

答案 25 :(得分:0)

我只有一个服务,该服务使用IntelliJ的2019.2.4版本进行基于构造函数的依赖项注入。 我发现更改服务名称(shift + f6),然后从git级别放弃更改很有帮助。