我创建了一个简单的单元测试,但IntelliJ错误地将其突出显示为红色。将其标记为错误
没豆子?
如下所示,它通过了测试?那么必须是Autowired?
使用@SpringBootApplication
注释创建Spring Boot应用程序时遇到了同样的问题。根据@Configuration
,这个注释代表@EnableAutoConfiguration
,@ComponentScan
和spring reference。
正如所料,新的注释工作正常,我的应用程序运行顺利但是,Intellij一直在抱怨未实现的@Autowire
依赖项。一旦我改回使用@Configuration
,@EnableAutoConfiguration
和@ComponentScan
分开,错误就停止了。似乎Intellij 14.0.3(很可能也是早期版本)尚未配置为识别@SpringBootApplication
注释。
现在,如果错误打扰你那么多,那么回到那三个单独的注释。否则,忽略Intellij ...您的依赖项解析已正确配置,因为您的测试通过了。
总记得...
人永远比机器大。
最后一条重要信息 - 添加ComponentScan
,以便应用程序知道它需要连接的东西。这与此问题的情况无关。但是,如果根本没有执行@autowiring
那么这可能是你的解决方案。
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
你需要做的是添加
在@ComponentScan("package/include/your/annotation/component")
的AppConfiguration.java
。
因为我认为你的AppConfiguraion.java
包比你的注释组件(@ Service,@ Component ...)的包更深,
比如"package/include/your/annotation/component/deeper/config"
。
我的申请中遇到了类似的问题。当我添加注释时,不正确的突出显示消失了。
@ContextConfiguration(classes = {...})
当我在IntelliJ v.14中出现时,我正在使用此注释来隐藏此错误:
@SuppressWarnings("SpringJavaAutowiringInspection")
我在Spring Boot应用程序中遇到了类似的问题。该应用程序使用Feign(来自带注释的接口的HTTP客户端合成请求)。使用SomeClient
注释接口@FeignClient
,Feign生成实现此接口的运行时代理类。当一些Spring组件试图自动装配SomeClient
类型的bean时,Idea没有发现SomeClient
类型的bean,因为项目中实际上没有真正的类,并且没有教会理念以任何方式理解@FeignClient
注释。
解决方案:使用SomeClient
注释接口@Component
。 (在我们的例子中,我们不直接在@FeignClient
上使用SomeClient
注释,我们宁愿使用注释@OurProjectFeignClient
的metaannotation @FeignClient
并添加@Component
注释也适用。)
这似乎仍然是最新的IntelliJ中的一个错误,并且与可能的缓存问题有关?
如果将@Repository注释添加为上面提到的mk321,请保存,然后删除注释并再次保存,这样可以解决问题。
您需要做的就是使用以下代码:
@ComponentScan
public class PriceWatchTest{
@Autowired
private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
我只需要使用@EnableAutoConfiguration来解决它,但是这个错误没有任何功能影响。
可以通过在Spring启动应用程序主类上放置@EnableAutoConfiguration来解决它。
对我来说,解决方案是将@EnableAutoConfiguration
放在@SpringBootApplication
下的Application类中,它会强调它,因为它是多余的。删除它,瞧瞧所有关于失踪豆子的警告都消失了!傻春......
在存储库类上添加Spring注释@Repository
。
我知道它应该没有这个注释。但是如果你添加它,IntelliJ将不会显示错误。
@Repository
public interface YourRepository ...
...
如果你使用Spring Data扩展Repository
类,那将是冲突问题。然后你必须指出明确的pagkages。
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
接下来,您可以无错误地自动装配您的存储库。
@Autowired
YourRepository yourRepository;
它可能不是一个好的解决方案(我猜你试图两次注册repositorium)。但为我工作,不要显示错误。
也许在新版本的IntelliJ中可以修复:https://youtrack.jetbrains.com/issue/IDEA-137023
在我的案例中,我试图@Autowired的目录不在同一级别,
在相同结构级别设置后,错误消失
希望它可以帮助一些人!
我在Spring启动应用程序中解决这个问题的方法是打开spring应用程序上下文并手动为缺少的autowired bean添加类!
(通过Project Structure菜单或弹簧工具窗口访问...编辑“Spring Application Context”)
因此,仅包含我的ExampleApplication spring配置的SpringApplicationContext,它还包含缺少的Bean:
Spring ApplicationContext:
这里是:错误消息消失了!
有时 - 在我的情况下是 - 原因是错误的导入。我不小心导入了
import org.jvnet.hk2.annotations.Service
代替
import org.springframework.stereotype.Service
盲目接受Idea建议进口的第一选择。第一次发生时我花了几分钟:-)
令人惊讶的是,成功运行Eclipse的面向Feign的项目无法在InteliJ中运行。当启动应用程序时,InteliJ抱怨我试图向serviceImpl层注入的Feign客户端说:字段personRestClient(我的Feign客户端)在......中需要一个无法找到的类型为bean的bean。考虑在配置中定义类型为'....'的bean。
我浪费了很长时间才弄明白什么是错的。我找到了一个解决方案(针对InteliJ),我并不完全理解:
或者选择Eclipse :)
检查bean的包是否正确写入
//Check if this is written right
package com.package1.package2.package3
import ...
@Service
class ServiceX {
...
}
将@AutoConfigureMockMvc用于测试类。
检查您是否错过了服务类中的@Service注释,这就是我的情况。
在我的情况下,我将@Autowired更改为@ Resource,错误的提示就消失了
我也遇到了这个问题,并通过删除Spring Facet解决了这个问题:
Facets
祝好运!
有时您需要指示@ComponentScan应扫描组件的位置。您可以通过将包作为此批注的参数传递来实现,例如:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
但是,如前所述,@ SpringBootApplication注释替换了@ComponentScan,因此在这种情况下,您必须执行相同的操作:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
至少在我的情况下,Intellij停止了抱怨。
我使用的是spring-boot 2.0和intellij 2018.1.1终极版,我遇到了同样的问题。
我通过将@EnableAutoConfiguration放在主应用程序类中来解决
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
把@Component
或@configuration
放在你的bean配置文件中似乎有用,比如:
@Configuration
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
@Component
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
只要您的测试通过就是好的,通过将光标放在错误上并在第一个项目的子菜单中找到alt + enter
,你会发现Disable Inspection
选择那个