从基于.xml的spring配置中传递包含@Configuration类

时间:2017-08-17 09:40:44

标签: spring intellij-idea

假设我们从基于xml的配置开始,比如main.xml,它通过以下方式导入java配置FullConfig.java

<context:annotation-config/>
<bean class="test.FullConfig"/>

此java配置具有以下形式:

@Configuration
@Import(value = {IncludeConfig.class})
public class FullConfig {
    @Autowired
    @Qualifier(value = "tmpBean")
    private DataClazz autowired;

    @Bean
    public DataClazz someOtherBean() {
        System.out.println("Using autowired tmpBean:" + autowired);
        return new DataClazz();
    }
}

所以它导入了另一个java配置,其中包含tmpBean类型DataClazz的定义,

@Configuration
public class IncludeConfig {
    @Bean
    public DataClazz tmpBean() {
        return new DataClazz();
    }
}

现在有两个问题:

  1. 这种“传递性包含”是否保证在春季有效(即someOtherBean()保证不会抛出NPE)?
  2. IntelliJ版本2017.2确实将@Qualifier(value = "tmpBean")标记为红色,并显示消息“无法找到带限定符的bean'tmpBean'”。这应该被视为一个错误吗?
  3. 注意:我已经检查过使用ClassPathXmlApplicationContext("main.xml")的应用程序是否正常工作,即没有抛出NPE(并且所有相关的bean都可见)。

1 个答案:

答案 0 :(得分:1)

您需要返回DataClazz:

@Bean
public DataClazz someOtherBean() {
    System.out.println("Using autowired tmpBean:" + autowired);
    return autowired;
}
  1. 可能是,但试着测试一下。
  2. IDEA-82844(Bug)