当我@Autowired
在类中使用Spring的注释时,IntelliJ IDEA会显示错误,但是该类可以正常运行。
这是此错误消息:
必须在有效的Spring bean(@ Component / @ Service等)中定义自动装配的成员,然后...(Ctrl + F1)检查bean类中的自动装配问题。
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
当我@Autowired
在类中使用Spring的注释时,IntelliJ IDEA会显示错误,但是该类可以正常运行。
这是此错误消息:
必须在有效的Spring bean(@ Component / @ Service等)中定义自动装配的成员,然后...(Ctrl + F1)检查bean类中的自动装配问题。
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Answers:
我在IntelliJ IDEA 13.1.4中遇到了相同的问题,我通过删除Spring构面(“文件”->“项目结构”)并将其保留为仅显示“检测”来解决该问题。
在这里遇到了同样的错误!
看来Intellij无法验证类实现是@Service还是@Component。
解决它只是从错误更改为警告(按Alt + Enter)。
从所有项目模块中删除.iml文件,然后转到File-> Invalidate Caches / Restart
.iml
文件,选择在pom.xml
文件的maven选项中重新导入,并进行了ctrl + s
重新生成.iml
。错误消失了。
确保您的Spring bean定义正确。有时,该应用程序运行良好,仅在IDE中显示错误,如果定义了Spring facet,请检查项目的“ iml”文件。
似乎是可见性问题-父控制器看不到您要连接的组件。
尝试添加
@ComponentScan("path to respective Component")
到父控制器。
确保您的IntelliJ Idea(IDE)知道要检查其模块的所有必需的弹簧配置。
您可以在下面检查
文件>项目结构>模块> [右侧面板中的项目名称]> Spring
有时,我们需要明确地告诉IDE,spring配置来自于依赖项(项目类路径中存在一个jar)
就我而言,我缺少在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图标出现在左边缘:
您应该检查是否在类上添加了@ Component,@ Repository或类似内容
我解决了添加Web方面的问题。
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。
我有类似的问题。我通过取消选中“处理显式注释的bean”选项来解决它(请参见下面的屏幕截图)。在Linux上默认启用此选项。现在,@ Service和@Configurations批注可见。 屏幕截图
我知道这是一个古老的问题,但是我没有找到能为我解决该问题的任何答案,因此我将提供解决方案。
注意:我认为可能是这个问题,但是我的问题与两次实现相同的接口无关。使用@Qualitier
确实使我的问题消失了,但这是一个绷带,而不是一个适当的解决方案,因此我对此并不满意。
背景
我的任务是维护一个旧项目,该项目经历了不同版本的spring,并且仅针对单独的模块进行了更新,因此至少可以说需要重构。我最初得到了重复的bean问题,并且进行了一些修补工作,即使在只有一个bean的情况下,OP的问题和重复的bean问题之间的问题来回切换。导航到重复的bean总是去同一个类。
问题
该问题出现在一个@Repository
班级中@Autowired
,该@Service
班级也具有@ComponentScan
注释。我注意到我也有一个在基础包上application-config.xml
做的弹簧,context:component-scan
我相信这是旧版Spring中的原始方法。我正在通过在一个支持项目中同时使用旧分支和较新分支的一部分来创建新分支,该支持项目用于几年来开发的不同项目中,这就是为什么会有如此混合搭配的原因方法论。
简单的解决方案
由于@ComponentScan
已经实现了更现代的使用方法,因此我删除了application-config.xml
,问题就解决了。
我可能会晚一点,但是花了几个小时并研究了这个问题。
我发现,在最新版本的IntelliJ 2020中, @ AutoWired是可选的,而基于构造函数的掺杂注入是更可取的。
我通过简单地从Service和Controller类中删除@AutoWired批注并使用基于构造函数的依赖项注入来解决该问题。
该链接可能会有所帮助。
编码愉快!