比方說,我有以下Spring配置(春天的版本是3.0.3):如何注入FactoryBean而不是其產生的對象?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="theFactoryBean" class="wax.MyFactoryBean"/>
<bean id="factoryBeanUser" class="wax.FactoryBeanUser">
<!-- what should be placed here?-->
</bean>
</beans>
我有FactoryBean
執行和其他一些實例的實例。我需要Spring注入其他實例FactoryBean
,而不是它生成的對象。
有兩種可能的解決方法。
首先一個,明顯,malfunctional:
<bean id="factoryBeanUser" class="wax.FactoryBeanUser">
<property name="myFactoryBean" ref="&theFactoryBean"/>
</bean>
有了這個配置春季拋出以下異常的開始:
[skipped irrelevant part]
Caused by: org.xml.sax.SAXParseException: The reference to entity "theFactoryBean" must end with the ';' delimiter.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
我發現這個解決方案Spring: Getting FactoryBean object instead of FactoryBean.getObject(),這個問題是maked作爲回答四人投了贊成票。所以我認爲這個解決方案可能會起作用,但是目前我的代碼有問題。
第二個,工作,但尷尬:
public class FactoryBeanUser implements ApplicationContextAware{
private MyFactoryBean myFactoryBean;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
myFactoryBean = (MyFactoryBean)applicationContext.getBean("&theFactoryBean");
}
}
我的問題是有可能使第一種方法的功能或者我應該用第二種方式堅守?
我不相信基準的名稱可以用符號開始。我會刪除它,然後重試。這種情況下的引用必須是工廠bean的bean名稱。 – duffymo 2010-08-09 15:21:29
@duffymo如果你是對的,那麼投票回答其他類似主題的人是完全錯誤的:)無論如何,如果我將引用名稱更改爲工廠bean的名稱,Spring會注入'FactoryBean'產生的值。這實際上是'FactoryBean'的目的。 – wax 2010-08-09 15:39:04
我想我也會在這裏學到一些東西;我從來沒有做過。我認爲應用程序的上下文是工廠 - 你還需要什麼? – duffymo 2010-08-09 15:50:09