IntelliJ IDEA在使用Spring';s@Autowired注释
当我在类中使用Spring的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
@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
注释。我注意到我还有一个springapplication config.xml
,它正在bas上执行context:component扫描