Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IntelliJ IDEA在使用Spring';s@Autowired注释_Spring_Spring Mvc_Intellij Idea_Warnings_Intellij Inspections - Fatal编程技术网

IntelliJ IDEA在使用Spring';s@Autowired注释

IntelliJ IDEA在使用Spring';s@Autowired注释,spring,spring-mvc,intellij-idea,warnings,intellij-inspections,Spring,Spring Mvc,Intellij Idea,Warnings,Intellij Inspections,当我在类中使用Spring的@Autowired注释时,IntelliJ IDEA显示错误,但是该类运行没有任何问题 以下是此错误消息: 必须在有效的spring中定义自动连线成员 bean(@Component/@Service等)更少。。。(Ctrl+F1)检查自动布线 bean类中的问题 确保您的Springbean定义正确。有时,应用程序工作正常,只是在IDE中显示错误,如果定义了Spring方面,请检查项目“iml”文件。我也遇到了同样的问题。我的原因是,包含autowired引用的b

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

以下是此错误消息:

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


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

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

我也有这个问题。 执行alt+enter,然后要求在受影响的线路上重新运行或禁用弹簧检查。
这似乎只是在13.4更新之后才出现的问题。

这里也出现了同样的错误

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


只需将错误更改为警告(按Alt+Enter)即可解决此问题。

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

我在IntelliJ IDEA 13.1.4中遇到了同样的问题
我通过删除Spring方面(文件->项目结构)并让它只显示“检测”来解决它。我通过为每个相关模块添加Spring方面(文件->项目结构),然后添加配置文件来解决这个问题。对于某些项目(SpringMVC),会自动检测到其中的配置文件。但是,对于jar项目,我必须手动添加配置文件。

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

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

尝试添加

@ComponentScan("path to respective Component") 

给父控制器。

在我的例子中,我没有在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>

org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
上下文配置位置
classpath*:applicationContext.xml
在应用程序上下文文件中:

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

添加此标记并运行maven重建项目后,intellj desapears中的自动连线错误将出现,并且bean图标将显示在左侧空白处:

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

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

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

我的建议是不在我的Crudepository接口上添加@Repository,我正在观看的教程没有将其添加到STS上,也没有抱怨。

确保IntelliJ Idea(IDE)知道您的模块正在检查的所有必要的spring配置

你可以在下面查一下

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


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

文件->项目结构->模块->+(在中间列)->spring->OK

您应该检查是否有@Component,@Repository或类中添加的类似内容

我已通过这种方式解决了此问题。
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 {
在IntelliJ中,您的所有包都应该位于一个子包中,该子包是main/java的子包。
例如,我已经将我的所有包放在src/main/java/com.misisol.watchStore/下,然后spring可以找到我的Bean。

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

我也有类似的问题。我通过取消选中“流程显式注释bean”选项(见下面的屏幕截图)解决了这个问题。默认情况下,此选项在linux上启用。 现在可以看到@Service和@Configurations注释。
通过转到文件>>项目结构>>方面,然后将所有配置文件添加到Spring方面,解决了这个问题。 之后,它开始检测bean所在的文件,并能够对问题进行排序。
IntelliJ提供此检查非常有价值,不应禁用IMHO。

我通过添加Suppress警告来修复此问题:

 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Autowired
 private ....

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

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

@Service
public class ServiceNameImpl implements ServiceName {

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

}

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

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

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

背景

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

问题

问题出现在
@Repository
类上,该类是
@Service
类中的
@Autowired
,该类也具有
@ComponentScan
注释。我注意到我还有一个spring
application config.xml
,它正在bas上执行
context:component扫描