【问题标题】:NoSuchBeanDefinitionException for autowired bean when java bean configuration location is changed from src/main/java to src/test/java当 java bean 配置位置从 src/main/java 更改为 src/test/java 时自动装配 bean 的 NoSuchBeanDefinitionException
【发布时间】:2016-01-07 04:12:15
【问题描述】:

我有一个现有的 Spring Boot 应用程序,我正在向它添加 junit tests。该项目在包含 bean 配置的 src/main/java 文件夹中有 Configuration.java

在我的junit 类中,当我使用

引用位置 src/main 中的配置文件时
  @SpringApplicationConfiguration(classes = Configuration.class) 

然后 Autowired bean 正确初始化。但是,当我在 src/test/java 中复制相同的配置文件并使用 Configuration 引用它时

 @SpringApplicationConfiguration(classes = TestConfig.class)

然后自动装配 bean 无法初始化并给出异常 NoSuchBeanDefinitionException

它是相同的配置java文件。我正在自动装配的 bean 存在于 src/main/java 中。 bean 配置 java 文件的位置会影响 bean 初始化吗?如果是,如何解决?

注意:我将相同的配置 java 文件复制到 src/test/java,因为我在测试时需要一些不同的属性。

【问题讨论】:

  • 为什么要复制...只需创建一个仅包含差异的新文件,然后加载两个文件...不要复制配置。
  • 在这种情况下如何选择在运行测试和运行主应用程序时加载哪个文件?
  • 让测试加载主配置和测试配置。您的应用不会改变。

标签: spring junit spring-boot


【解决方案1】:

我能够通过使用@ComponentScanbasepackage 属性来解决它,如下所示(在 src/test/java 的配置文件中将属于包的包名放在 src/main/java 中)。

@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = CommandLineRunner.class),basePackages = "com.mypackage")
@EnableAutoConfiguration(exclude={MetricRepositoryAutoConfiguration.class})
public class TestConfiguration  {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多