2017-08-17 87 views
0

假設我們有一個基於XML的配置開始,說main.xml,即通過導入一個java配置FullConfig.java傳遞納入@Configuration類的從基於的.xml彈簧配置

<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配置,其中包含DataClazz類型的tmpBean的定義,

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

現在兩個問題:

  1. 這是「傳遞列入」保證春季工作(即是someOtherBean()保證不會拋出NPE)?
  2. IntelliJ版本2017.2確實標記爲@Qualifier(value = "tmpBean"),並顯示消息「無法找到具有限定符'tmpBean'的bean」。如果這被認爲是一個錯誤?

注意:我檢查了使用ClassPathXmlApplicationContext("main.xml")的應用程序確實工作正常,即沒有引發NPE(並且所有相關的bean都可見)。

回答

1

您需要返回DataClazz:

@Bean 
public DataClazz someOtherBean() { 
    System.out.println("Using autowired tmpBean:" + autowired); 
    return autowired; 
} 
  1. 或許是肯定的,但嘗試測試它。 IDEA-82844(Bug)
+0

感謝您指出'someOtherBean()'中的類型。糾正。關於(1)我確實嘗試了,它似乎工作;但是,在複雜得多的環境中我們遇到了類似的問題,所以我想知道這是否能夠在春季保證正常工作(比如,Spring 4.0.6+)。關於(2):與IDEA-82844相反,IntelliJ確實認爲沒有這樣的bean;導航(按Ctrl +鼠標點擊不起作用)。 –