在一個模塊化的Spring配置應用程序中,我們使用工廠bean來跨模塊邊界提供bean實例。如何避免Spring配置Java配置bean
例如,一個模塊甲可由名稱名稱暴露bean實例。然後另一個模塊乙可以通過風格
<bean id="nameBean" class="com.zfabrik.springframework.ComponentFactoryBean">
<property name="componentName" value="A/name" />
<property name="className" value="a.AInterface" />
</bean>
注意模塊已分離的類加載器層次結構和實際的實現類的A /名稱的聲明消耗是豆可能無法在乙可見。就好像在OSGI中一樣(儘管這不是OSGi)。
我的目標是在一個綱領性的應用程序上下文中乙提供A /名稱。然而試圖
@Configuration
public static class AppContext {
@Bean AInterface nameBean() {
return lookup("A/name",AInterface.class);
}
}
時(查找不實際的實例檢索)我看到Spring試圖配置返回的實例。例如,它將嘗試解析@Autowired屬性A /名稱的實現類 - 這在B(並且查找的協議總是提供完全配置的東西)的上下文中沒有意義。即使如果我嘗試
@Configuration
public static class AppContext {
@Bean(autowire=Autowire.NO) AInterface nameBean() {
return lookup("A/name",AInterface.class);
}
}
它會去配置返回的實例。
如何在不觸及其實現實例的情況下爲應用程序上下文提供一個bean?
編輯:由Sotirios Delimanolis建議,返回FactoryBean做AFAICT避免Spring配置返回的實例。
的替代代碼如下所示:
@Configuration
public static class AppContext {
@Bean FactoryBean<AInterface> nameBean() {
return new ComponentFactoryBean("A/name",AInterface.class);
}
}
這不是因爲的FactoryBean在返回類型的@UntouchedBean標註爲酷,但它解決了這個問題。
@Sotirios:請建議作爲答案,以便我可以相應地標記您的建議。
/編輯
你能提供一個真實的,可重複的例子,或澄清你想要發生什麼與實際發生的事情? –
_Spring是什麼意思是試圖配置返回的instance_?無論從@ @ Bean方法返回的是Spring bean,都受Spring處理。 –
當通過工廠bean和XML聲明提供bean時,Spring將不會配置返回的實例。它將簡單地將它添加到bean工廠。我正在尋找類似的東西在Java配置中使用 - 儘管沒有工廠bean。 – gnomie