Answers:
使用它们的注释创建Spring Boot应用程序时,我遇到了同样的问题@SpringBootApplication
。该注释表示@Configuration
,@EnableAutoConfiguration
并且@ComponentScan
根据弹簧的参考。
正如预期的那样,新注释正常工作,我的应用程序运行平稳,但是Intellij一直抱怨未实现的@Autowire
依赖关系。当我改回使用@Configuration
,@EnableAutoConfiguration
并@ComponentScan
单独的错误停止。看来Intellij 14.0.3(很可能还有早期版本)尚未配置为识别@SpringBootApplication
注释。
现在,如果错误对您的影响如此之大,请恢复为这三个单独的注释。否则,请忽略Intellij ...由于测试通过,因此您的依赖关系解析已正确配置。
总记得...
人永远大于机器。
@SpringBootApplication
我收到此错误。我通过使用@ scanBasePackages
参数来@SpringBootApplication
指定@JaõsMatos的建议,并指定了应扫描的包/名称空间。
@Repository
在存储库类上添加Spring注释。
我知道没有此注释也可以使用。但是,如果添加此选项,IntelliJ将不会显示错误。
@Repository
public interface YourRepository ...
...
如果您将Spring Data与扩展Repository
类一起使用,则将成为冲突页面。然后,您必须指明显式的分页符。
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
有时您需要指出@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-boot 2.0和intellij 2018.1.1 Ultimate Edition,我遇到了同样的问题。
我通过将@EnableAutoConfiguration放在主应用程序类中来解决
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
¯\ _(ツ)_ / ¯–
将@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");
}
}
如果您不想对代码进行任何更改,只是为了使您的IDE满意即可。我已经通过将所有组件添加到Spring构面中解决了该问题。
我在Spring Boot应用程序中有类似的问题。该应用程序利用Feign(HTTP客户端合成来自带注释的接口的请求)。SomeClient
用注释接口后@FeignClient
,Feign会生成实现此接口的运行时代理类。当某个Spring组件尝试自动连接type的bean时SomeClient
,Idea抱怨没有SomeClient
找到类型的bean,因为在项目中实际上不存在任何实际的类,并且Idea并未以@FeignClient
任何方式被教导来理解注释。
解决方案:注释界面SomeClient
与@Component
。(在我们的例子中,我们不直接使用@FeignClient
注解SomeClient
,而是使用带@OurProjectFeignClient
注解的元注解,@FeignClient
并且向其添加@Component
注解也可以使用。)
@Component
到界面可以解决此问题。但是我认为这不是正确的方法……我认为这是IntelliJ IDEA中的一个错误,或者说不太难,IntelliJ IDEA尚未为较新的Feign版本做好准备。它可以@Component
在不正确的伪装版本中使用(在其中使用@FeignClient
注解org.springframework.cloud.netflix.feign
而不是org.springframework.cloud.openfeign
-可能是造成此问题的原因?)。您是否找到了其他详细信息(可能是故障单)?
@Component
)@FeignClient
来自org.springframework.cloud.netflix.feign
)包。
您需要做的就是添加
@ComponentScan("package/include/your/annotation/component")
在中AppConfiguration.java
。
由于我认为您AppConfiguraion.java
的软件包比注释组件(@ Service,@ Component ...)的软件包更深,
如"package/include/your/annotation/component/deeper/config"
。
当它出现在IntelliJ v.14中时,我正在使用此注释隐藏此错误:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
这似乎仍然是最新IntelliJ中的错误,并且与可能的缓存问题有关?
如果将@Repository批注添加为上述的mk321,请保存,然后删除批注并再次保存,这可以解决此问题。
可以通过在Spring Boot应用程序主类上放置@EnableAutoConfiguration来解决。
有时-在我的情况下-原因是错误的导入。我不小心输入了
import org.jvnet.hk2.annotations.Service
代替
import org.springframework.stereotype.Service
通过盲目接受Idea的建议进口商品中的第一选择。第一次发生时花了我几分钟:-)
令人惊讶的是,一个成功地与Eclipse一起运行的面向Feign的项目无法在InteliJ中运行。启动应用程序时,InteliJ抱怨我尝试向serviceImpl层注入的Feign客户端说:...中的field personRestClient(我的Feign客户端)需要类型...找不到的bean。考虑在配置中定义类型为'....'的bean。
我浪费了很长时间试图了解问题所在。我找到了一个我不完全理解的解决方案(针对InteliJ):
或选择Eclipse :)
简单,您必须执行2个步骤
==>> change @Autowired to @Resource
IntelliJ IDEA旗舰版
将您的主类添加到IntelliJ Spring Application Context中,例如Application.java
File
-> Project Structure..
左侧:项目设置->模块
右侧:找到您的包装结构
Spring
并添加+
Application.java