我创建了一个简单的单元测试,但 IntelliJ 错误地将其突出显示为红色。将其标记为错误
没有豆子?
https://i.stack.imgur.com/4cCFH.png
正如您在下面看到的,它通过了测试?所以它必须是Autowired?
https://i.stack.imgur.com/YFGln.png
在使用他们的 @SpringBootApplication
注释创建 Spring Boot 应用程序时,我遇到了同样的问题。此注解根据 spring reference 表示 @Configuration
、@EnableAutoConfiguration
和 @ComponentScan
。
正如预期的那样,新注释工作正常,我的应用程序运行顺利,但是,Intellij 一直抱怨未实现的 @Autowire
依赖项。一旦我改回分别使用 @Configuration
、@EnableAutoConfiguration
和 @ComponentScan
,错误就停止了。 Intellij 14.0.3(很可能也是早期版本)似乎尚未配置为识别 @SpringBootApplication
注释。
现在,如果这些错误对您造成如此大的困扰,那么请回到这三个单独的注释。否则,请忽略 Intellij ...您的依赖解析已正确配置,因为您的测试通过了。
总记得...
人永远大于机器。
在存储库类上添加 Spring 注释 @Repository
。
我知道它应该在没有这个注释的情况下工作。但是如果你添加这个,IntelliJ 不会显示错误。
@Repository
public interface YourRepository ...
...
如果您使用带有扩展 Repository
类的 Spring Data,它将是冲突包。然后你必须直接指明包裹。
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
接下来,您可以自动装配您的存储库而不会出错。
@Autowired
YourRepository yourRepository;
这可能不是一个好的解决方案(我猜您正在尝试注册存储库两次)。但为我工作,不要显示错误。
也许在新版本的 IntelliJ 中可以修复:https://youtrack.jetbrains.com/issue/IDEA-137023
我的 IntelliJ IDEA Ultimate 版本(2016.3.4 Build 163)似乎支持这一点。诀窍是您需要启用 Spring Data 插件。
https://i.stack.imgur.com/pIdbk.png
有时你需要指出@ComponentScan 应该在哪里扫描组件。您可以通过将包作为此注释的参数传递来做到这一点,例如:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
然而,正如已经提到的,@SpringBootApplication 注解替换了@ComponentScan,因此在这种情况下你必须这样做:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
至少在我的情况下,Intellij 不再抱怨了。
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
,虽然应用程序运行良好,但 intellij 不喜欢它。更改为 @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
已为我修复!
我总是通过以下方式解决这个问题。设置>检查> Spring Core>代码,而不是从错误转向警告严重性选项
https://i.stack.imgur.com/9c4Xw.jpg
Incorrect injection point autowiring in Spring bean components
。
我正在使用 spring-boot 2.0 和 intellij 2018.1.1 终极版,我遇到了同样的问题。
我通过在主应用程序类中放置 @EnableAutoConfiguration 来解决
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯\_(ツ)_/¯
@EnableAutoConfiguration
检查您是否错过了服务类中的 @Service 注释,对我来说就是这种情况。
将 @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");
}
}
配置应用程序上下文,一切都会好的。
https://i.stack.imgur.com/gg3BF.png
您是否检查过您是否在服务实现之上使用了 @Service
注释?它对我有用。
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserServices {}
在类级别将 @EnableAutoConfiguration
注释与 @Component
一起使用。它将解决这个问题。
例如:
@Component
@EnableAutoConfiguration
public class ItemDataInitializer {
@Autowired
private ItemReactiveRepository itemReactiveRepository;
@Autowired
private MongoOperations mongoOperations;
}
如果您不想为了让您的 IDE 满意而对代码进行任何更改。我已经通过将所有组件添加到 Spring facet 来解决它。
创建一个名称为“服务、处理器和路由器”或您喜欢的任何名称的组;删除并重新创建“Spring Application Context”,使用您之前创建的组作为父组。
https://i.stack.imgur.com/NLiWU.png
对我来说,解决方案是将 @EnableAutoConfiguration
放在 Application 类中的 @SpringBootApplication
下,因为它是多余的,所以要加下划线。删除它,瞧,所有关于丢失 bean 的警告都消失了!愚蠢的春天...
最后一条重要信息 - 添加 ComponentScan
以便应用了解它需要连接的内容。这与这个问题的情况无关。但是,如果根本没有执行 @autowiring
,那么这可能是您的解决方案。
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
只要您的测试通过了,您就可以了,通过将光标移到错误上并在第一个项目的子菜单中点击 alt + enter
,您会发现 Disable Inspection
选择
简单你必须做2个步骤
将休眠核心依赖项更改@Autowired 添加到@Resource。
==>> change @Autowired to @Resource
当它出现在 IntelliJ v.14 中时,我正在使用此注释来隐藏此错误:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
我在 Spring Boot 应用程序中遇到了类似的问题。该应用程序利用 Feign(HTTP 客户端从带注释的接口合成请求)。使用 @FeignClient
注释接口 SomeClient
,Feign 生成实现此接口的运行时代理类。当某些 Spring 组件尝试自动装配 SomeClient
类型的 bean 时,Idea 抱怨找不到 SomeClient
类型的 bean,因为项目中实际上不存在真正的类,并且没有教导 Idea 以任何方式理解 @FeignClient
注释。
解决方案:用 @Component
注释接口 SomeClient
。 (在我们的例子中,我们不直接在 SomeClient
上使用 @FeignClient
注释,而是使用带有注释 @FeignClient
的元注释 @OurProjectFeignClient
,并且向其添加 @Component
注释也可以。)
@Component
即可解决问题。但我认为这不是正确的方法......在我看来,这是 IntelliJ IDEA 中的一个错误,或者不是那么难 IntelliJ IDEA 还没有为更新的 Feign 版本做好准备。它在没有 @Component
的情况下在错误的 feign 版本中工作(其中 @FeignClient
注释在 org.springframework.cloud.netflix.feign
而不是 org.springframework.cloud.openfeign
- 也许这是问题的原因?)。您是否为此找到了更多详细信息(可能是错误票)?
@Component
无法工作)是来自 org.springframework.cloud.netflix.feign
的 @FeignClient
)包。
作为 IntelliJ (IDE) 和开发环境之间的大多数同步错误。
特别是如果您有自动化测试或构建,它一直通过绿色。
使缓存无效并重新启动解决了我的问题。
你需要做的是添加
AppConfiguration.java
中的 @ComponentScan("package/include/your/annotation/component")
。
由于我认为您的 AppConfiguraion.java
的包比您的注释组件(@Service、@Component...)的包更深,
例如 "package/include/your/annotation/component/deeper/config"
。
我在我的应用程序中遇到了类似的问题。当我添加注释时,不正确的突出显示消失了。
@ContextConfiguration(classes = {...})
在我的情况下,我试图@Autowired 的目录不在同一级别,
在相同的结构级别设置后,错误消失了
希望它可以帮助某人!
IntelliJ IDEA Ultimate
将主类添加到 IntelliJ Spring Application Context,例如 Application.java
File
-> Project Structure..
左侧:项目设置 -> 模块
右侧:在您的包结构中找到 Spring
并添加 +
Application.java
只需在您的 POJO 中添加以下两个注释。
@ComponentScan
@Configuration
public class YourClass {
//TODO
}
我在我的 Spring Boot 应用程序中解决这个问题的方法是打开 Spring 应用程序上下文并手动添加缺少的自动装配 bean 的类!
(通过项目结构菜单或弹簧工具窗口访问...编辑“弹簧应用程序上下文”)
因此,SpringApplicationContext 不仅包含我的 ExampleApplication spring 配置,还包含缺少的 Bean:
SpringApplication上下文:
ExampleApplication.java
MissingBeanClass.java
etvoilà:错误信息消失了!
这似乎仍然是最新 IntelliJ 中的一个错误,并且与可能的缓存问题有关?
如果您将@Repository注解添加为上面提到的mk321,保存,然后删除注解并再次保存,这样可以解决问题。
有时 - 在我的情况下 - 原因是错误的导入。我不小心导入了
import org.jvnet.hk2.annotations.Service
代替
import org.springframework.stereotype.Service
通过盲目接受 Idea 建议的导入中的第一选择。第一次发生时花了我几分钟:-)
完成这项工作所需要做的就是以下代码:
@ComponentScan
public class PriceWatchTest{
@Autowired
private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
我只需要使用@EnableAutoConfiguration 来解决它,但是这个错误对功能没有影响。
可以通过在 Spring Boot 应用程序主类上放置 @EnableAutoConfiguration 来解决。
不定期副业成功案例分享
@SpringBootApplication
我收到此错误。我遵循@Jaõs Matos 的建议,将scanBasePackages
参数用于@SpringBootApplication
,并指定了应扫描的包/命名空间。