Intellij @Autowired。找不到匹配的spring bean

时间:2018-03-06 02:30:09

标签: java spring intellij-idea

  

JAVA 1.7
  春天4.3.7
  IntelliJ IDEA 2017.3.4(终极版)   Build#IU-173.4548.28,建于2018年1月30日   JRE:1.8.0_152-release-1024-b11 x86_64   JVM:JetBrains s.r.o的OpenJDK 64位服务器VM   Mac OS X 10.13.3

为什么没找到?代码没有问题,测试成功。

但我担心错误标记。

useDefaultFilters false = not found。

@Configuration
@EnableAspectJAutoProxy
@ComponentScan(
    basePackages = "org.fxb.module",
    useDefaultFilters = false,
    includeFilters = {
        @Filter(type = FilterType.ANNOTATION, classes = { Aspect.class, Mapper.class }),
    }
)
public class ModuleConfiguration {
  @Autowired
  private ModuleContextAOP moduleContextAOP;

enter image description here

useDefaultFilters = true = found。

enter image description here

AOP代码

package org.fxb.module.aop;

@Aspect
@Component
public class ModuleContextAOP {

enter image description here

我认为这是一个没有问题的代码。我不明白为什么IntelliJ似乎是一个错误。

3 个答案:

答案 0 :(得分:0)

我认为它无法自动装配组件,因为您自动装配ModuleContextAOP的类ModuleConfiguration不是组件。尝试使用组件注释ModuleConfiguration,它应该工作。通常@Configuration用于定义bean,但是你试图自动装配它们。

答案 1 :(得分:0)

您的类ModuleConfiguration 不是Spring bean类因此无法自动连接它。您需要将类的bean条目放在XML文件中(您声明其他spring bean)或使用@component注释它。

@Component表示带注释的类是“组件”。在使用基于注释的配置和类路径扫描时,此类被视为自动检测的候选者。

或者您可以使用@Configuration将所有spring bean扫描到一个类中 @Configuration是Spring 3中引入的基于Java的配置机制的核心。它提供了基于XML的配置的替代方案。

所以下面两个片段是相同的:

<beans ...>
    <context:component-scan base-package="my.base.package"/>
    ... other configuration ...
</beans>

@Configuration
@ComponentScan(basePackages = "my.base.package")
public class RootConfig {
    ... other configuration ...
}

在这两种情况下,Spring都会在my.base.package及其下面扫描带有@Component注释的类或其他一个用@Component进行元注释的注释,例如{{1} }。

答案 2 :(得分:0)

https://youtrack.jetbrains.com/issue/IDEA-187757

includeFilters = @Filter(type = FilterType.ANNOTATION, classes = Component.class

includeFilters = @Filter(type = FilterType.ANNOTATION, value = Component.class

解决。

感谢...