簡體   English   中英

如何避免在Java配置中Spring配置bean

[英]How to avoid Spring configuring bean in Java config

在模塊化的Spring配置的應用程序中,我們使用工廠bean來提供跨模塊邊界的bean實例。

例如,一個模塊A可以通過名稱name公開一個bean實例。 然后,另一個模塊B可以通過樣式聲明使用該bean

<bean id="nameBean" class="com.zfabrik.springframework.ComponentFactoryBean">
    <property name="componentName"  value="A/name" />
    <property name="className"  value="a.AInterface" />
</bean>

請注意,模塊具有單獨的類加載器層次結構,並且A / name的實際實現類在B中可能不可見。 就像在OSGI中一樣(盡管這不是OSGi)。

我的目標是在B的程序化應用程序上下文中提供A / name 但是當嘗試

@Configuration
public static class AppContext {
  @Bean AInterface nameBean() { 
    return lookup("A/name",AInterface.class);
  }
}

(查找會進行實際的實例檢索)我看到Spring嘗試配置返回的實例。 例如,它將嘗試解析A / names的實現類的@Autowired屬性-在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:請提出建議,以便我可以相應地標記您的建議。

/編輯

好的,這樣它就可以關閉了。 建議並接受的答案是返回工廠bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM