intellij错误地说没有findautowired存储库的types的bean
我创build了一个简单的unit testing,但IntelliJ不正确地将其突出显示为红色。 标记为错误
没有豆子?
正如你可以看到它通过testing? 所以它必须是Autowired?
使用@SpringBootApplication
注释创buildSpring Boot应用程序时,我遇到了同样的问题。 根据spring引用 ,此注释表示@Configuration
@EnableAutoConfiguration
, @ComponentScan
@EnableAutoConfiguration
和@ComponentScan
。
正如所料,新的注释工作正常,我的应用程序运行平稳,但Intellij不断抱怨未实现的@Autowire
依赖项。 只要我改回使用@Configuration
@EnableAutoConfiguration
, @ComponentScan
@EnableAutoConfiguration
和@ComponentScan
@EnableAutoConfiguration
,错误就停止了。 看来Intellij 14.0.3 (也可能是更早的版本)还没有configuration为识别@SpringBootApplication
注释。
现在,如果错误对您造成了很大的影响,那么请回到这三个单独的注释。 否则,忽略Intellij …您的依赖项parsing已正确configuration,因为您的testing通过。
总记得…
人总是比机器更大。
在资源库类中添加Spring注解@Repository
。
我知道它应该没有这个注释工作。 但是如果你添加这个,IntelliJ不会显示错误。
@Repository public interface YourRepository ... ...
如果你使用Spring Data扩展Repository
类,它将是冲突pagkages。 那么你必须指出明确pagkages。
import org.springframework.data.repository.Repository; ... @org.springframework.stereotype.Repository public interface YourRepository extends Repository<YourClass, Long> { ... }
接下来,您可以自动assembly您的存储库而不会出错。
@Autowired YourRepository yourRepository;
这可能不是一个好的解决scheme(我想你试图注册两次存储)。 但为我工作,不要显示错误。
也许在新版本的IntelliJ中可以修复: https : //youtrack.jetbrains.com/issue/IDEA-137023
如果你不想改变你的代码只是为了让你的IDE快乐。 我已经通过将所有组件添加到Spring方面来解决这个问题。
- 创build一个名称为“服务,处理器和路由器”或您喜欢的任何名称的组;
- 删除并重新创build“Spring应用程序上下文”使用您以前创build的组作为父项。
我的IntelliJ IDEA Ultimate版本(2016.3.4 Build 163)似乎支持这一点。 诀窍是你需要启用Spring Data插件。
有时您需要指出@ComponentScan应扫描哪些组件。 你可以通过传递包作为这个注解的参数来做到这一点,例如:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
但是,如前所述,@SpringBootApplication注释会replace@ComponentScan,因此在这种情况下,您必须执行相同的操作:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
至less在我的情况下,Intellij停止抱怨。
最后一块重要信息 – 添加ComponentScan
以便应用知道需要连线的东西。 这在这个问题的情况下是不相关的。 但是,如果没有@autowiring
正在执行,那么这可能是您的解决scheme。
@Configuration @ComponentScan(basePackages = { "some_package", }) public class someService {
只要你的testing通过你是好的,击中alt + enter
通过将光标放在错误,并在第一个项目的子菜单中,你会发现Disable Inspection
select
将@Component
或@configuration
放在你的beanconfiguration文件中似乎是可行的,例如:
@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"); } }
这似乎仍然是在最新的IntelliJ中的错误,并与可能的caching问题?
如果将上面提到的@Repository注解添加为mk321,则保存,然后删除注释并再次保存,这将修复问题。
你需要做的是添加
@ComponentScan("package/include/your/annotation/component")
在AppConfiguration.java
。
由于我认为你的AppConfiguraion.java
的包比你的注解组件(@Service,@Component …)的包更深 ,
比如"package/include/your/annotation/component/deeper/config"
。
我的应用程序中有类似的问题。 当我添加注释不正确highliting消失。
@ContextConfiguration(classes = {...})
我在我的spring启动应用程序中解决这个问题的方法是打开spring应用程序上下文,并手动为缺less的autowired bean添加类。
(通过“项目结构”菜单或popup工具窗口访问…编辑“Spring应用程序上下文”)
因此,SpringApplicationContext不包含我的ExampleApplication springconfiguration,而是包含了缺less的Bean:
SpringApplicationContext:
- ExampleApplication.java
- MissingBeanClass.java
etvoilà:错误消息消失了!
所有你需要做的工作是以下代码:
@ComponentScan public class PriceWatchTest {
@Autowired private PriceWatchJpaRepository priceWatchJpaRepository;
我也遇到过这个问题,并通过删除Spring Facet来解决它:
- 文件 – >项目结构
- select小
Facets
- 删除弹簧
祝你好运!