当我在类中使用 Spring 的@Autowired
注释时,IntelliJ IDEA 显示错误,但该类运行没有任何问题。
这是此错误消息:
自动装配的成员必须在有效的 spring bean 中定义(@Component/@Service 等) 更少... (Ctrl+F1) 检查 bean 类中的自动装配问题。
当我在类中使用 Spring 的@Autowired
注释时,IntelliJ IDEA 显示错误,但该类运行没有任何问题。
这是此错误消息:
自动装配的成员必须在有效的 spring bean 中定义(@Component/@Service 等) 更少... (Ctrl+F1) 检查 bean 类中的自动装配问题。
我在 IntelliJ IDEA 13.1.4 上遇到了同样的问题,我通过删除 Spring facet(文件->项目结构)并让它只显示“检测”来解决它。
我通过添加抑制警告来修复它:
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private ....
如果您知道 bean 存在并且它只是检查的问题,那么只需在变量声明之前添加以下内容:
@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;
有时,如果已声明 bean,则 IntelliJ 无法解析,例如,当有条件地包含 bean 并且条件解析在运行时动态发生时。在这种情况下,IntelliJ 的静态代码分析器似乎无法检测到 bean。
这里有同样的错误!
似乎 Intellij 无法验证类实现是 @Service 还是 @Component。
解决它只是从错误更改为警告(按 Alt + Enter)。
从所有项目模块中删除 .iml 文件,然后转到 File -> Invalidate Caches/Restart
文件 -> ProjectStructure -> 模块 -> +(在中央列) -> 弹簧 -> 确定
我有同样的问题。我通过为每个相关模块添加 Spring facet(文件->项目结构)来解决它,然后添加配置文件。对于某些项目(spring mvc),会自动检测到配置文件。但是,对于 jar 项目,我必须手动添加配置文件。
通过转到 File >> Project Structure >> Facets 然后将所有配置文件添加到 Spring Facet 解决了这个问题。之后,它开始检测 bean 所在的文件并能够对问题进行排序。IntelliJ 提供此检查非常有价值,恕我直言,不应禁用。
确保您的 Spring bean 定义正确。有时,应用程序工作正常,它只是在 IDE 中显示错误,如果您定义了 Spring facet,请检查您的项目“iml”文件。
我可能有点晚了,但是在花了几个小时研究这个问题之后。
我发现在最新版本的IntelliJ 2020中,@AutoWired 是可选的,基于构造函数的依赖注入更可取。
我通过简单地从 Service 和 Controller 类中删除@AutoWired Annotation 并使用基于构造函数的依赖注入来解决了这个问题。
此链接可能会有所帮助。
快乐编码!
确保您的 IntelliJ Idea (IDE) 了解正在检查您的模块的所有必要弹簧配置。
你可以在下面检查这个
文件 > 项目结构 > 模块 > [您在右侧面板中的项目名称] > Spring
有时,我们需要明确告诉 IDE spring 配置来自依赖项(项目类路径中存在的 jar)
这似乎是可见性问题 - 父控制器看不到您尝试连接的组件。
尝试添加
@ComponentScan("path to respective Component")
到父控制器。
我遇到了同样的问题。我的原因是包含自动装配引用的 bean 不是 Spring 组件(它是 EJB),而是有一个 SpringBeanAutowiringInterceptor 拦截器允许使用自动装配。我认为 Intellij 在其自动装配检查中不考虑这种可能性。
我也有这个问题。执行alt+enter然后要求在受影响的行上重新运行或禁用 Spring 检查来修复它。这似乎只是在 13.4 更新后才成为问题。
你应该检查你是否在课堂上添加了@Component、@Repository 或类似的东西
我的原因是没有在我的 CrudRepository 界面上添加@Repository,我正在观看的教程没有在 STS 上添加它并且它没有抱怨。
就我而言,我错过了在 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 图标出现在左边距:
我知道这是一个老问题,但我没有遇到任何可以为我解决这个问题的答案,所以我会提供我的解决方案。
注意:我认为问题可能是this,但我的问题与两次实现相同的接口无关。使用@Qualitier
确实让我的问题消失了,但它是绷带而不是适当的解决方案,所以我没有解决这个问题。
背景
我的任务是维护一个旧项目,该项目经历了不同版本的 spring 并且仅针对单独的模块进行了更新,因此至少可以说需要重构。我最初遇到了重复的 bean 问题,并且在 OP 的问题和重复的 bean 问题之间来回修改问题,即使只有一个 bean;导航到重复的 bean 总是去同一个类。
问题
该问题出现在一个类@Repository
中,该类中也有注释。我注意到我还有一个在基础包上做的弹簧,我相信这是旧版本 Spring 中的原始方法。我正在通过在一个支持项目中使用旧分支和新分支的一部分来创建一个新分支,该支持项目用于多年来开发的不同项目,这就是为什么会有这样的混合搭配的方法论。@Autowired
@Service
@ComponentScan
application-config.xml
context:component-scan
简单的解决方案
@ComponentScan
由于已经实施了更现代的使用方法,因此我只是删除了application-config.xml
该问题并解决了问题。
有点晚了,但我希望它对其他人有帮助。
确保将@Service 放在服务的实现类上
@Service
public class ServiceNameImpl implements ServiceName {
@Override
public void method(ObjectType paramName) {
//CODE
}
}
这就是我修复错误的方式。
我解决了添加 Web 方面的问题。
我已经通过这种方式解决了这个问题。在 IntelliJ 中,你所有的包都应该在一个子包中,它是 main/java 的子包。例如,我已将所有包放在 src/main/java/com.misisol.watchStore/ 下,然后 spring 可以找到我的 bean。
我有类似的问题。我通过取消选中“处理显式注释的bean”选项来解决它(见下面的截图)。这个选项在 linux 上默认是启用的。现在 @Service 和 @Configurations 注释是可见的。 截屏
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 {
使用@Qualifier 注入 Bean 为我解决了这个问题。
我只有一个使用基于构造函数的依赖注入和 2019.2.4 版本的 IntelliJ 的服务遇到了这个问题。我发现更改服务名称(shift + f6)然后丢弃 git 级别的更改很有帮助。
以下对我有用: