相关疑难解决方法(0)

如何注入FactoryBean而不是它生成的对象?

假设我有以下Spring配置(Spring的版本是3.0.3):

<?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>
Run Code Online (Sandbox Code Playgroud)

我有FactoryBean实现的实例和一些其他实例.我需要Spring注入其他实例FactoryBean,而不是它生成的对象.

有两种可能的方法来解决它.

第一个,显而易见且有故障:

 <bean id="factoryBeanUser" class="wax.FactoryBeanUser">
    <property name="myFactoryBean" ref="&theFactoryBean"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

使用此配置,Spring会在启动时抛出异常:

    [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)
Run Code Online (Sandbox Code Playgroud)

我找到了这个解决方案Spring:获取FactoryBean对象而不是FactoryBean.getObject(),这个问题得到了回答,有四个人投了赞成票.所以我假设这个解决方案可能有效,但目前我的代码中有问题.

第二个,工作但很尴尬:

public class FactoryBeanUser implements ApplicationContextAware{

private MyFactoryBean myFactoryBean;

   public void setApplicationContext(ApplicationContext applicationContext) throws …
Run Code Online (Sandbox Code Playgroud)

java spring

17
推荐指数
1
解决办法
5138
查看次数

标签 统计

java ×1

spring ×1