Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can弹簧&x27;s ObjectFactoryCreatingFactoryBean是否与引用接口的泛型一起工作?_Java_Spring - Fatal编程技术网

Java Can弹簧&x27;s ObjectFactoryCreatingFactoryBean是否与引用接口的泛型一起工作?

Java Can弹簧&x27;s ObjectFactoryCreatingFactoryBean是否与引用接口的泛型一起工作?,java,spring,Java,Spring,我正在使用Spring的ObjectFactoryCreatingFactoryBean检索一个原型范围的bean,如中所述。下面是我的应用程序上下文 <bean id="exportFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean"> <property name="targetBeanName"> <idref

我正在使用Spring的ObjectFactoryCreatingFactoryBean检索一个原型范围的bean,如中所述。下面是我的应用程序上下文

<bean id="exportFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
    <property name="targetBeanName">
        <idref local="export" />
    </property>
</bean>

<bean id="export" class="com.someorg.ExportImpl" scope="prototype"/>
使用此配置成功加载应用程序上下文,并且在调用exportFactory.getObject()时引发异常。使用相同的配置,我可以成功地检索ExportImpl的一个实例,因此我知道bean是正确连接的


我想知道a)Spring在这里做什么,b)有什么原因使我无法使用作为接口的类型参数的ObjectFactory吗?

将限定符更改为:

@Qualifier("export")

当您通过
@Autowired
获取
ObjectFactory
时,实际上不需要
ObjectFactoryCreatingFactoryBean
。在这种情况下,bean的
ObjectFactory
是自动创建的,尽管我在文档中找不到任何关于这种行为的参考

因此,您观察到的行为可以解释如下:

  • 编写
    @Autowired@Qualifier(“exportFactory”)ObjectFactory
    时,Spring创建
    ObjectFactory
    ,返回名为
    exportFactory
    的bean,该bean本身是
    ObjectFactoryCreatingFactoryBean
    返回的
    ObjectFactory
    (它的类是
    org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean$TargetBeanObjectFactory

  • 当您编写
    @Autowired@Qualifier(“exportFactory”)ObjectFactory
    时,Spring尝试查找名为
    exportFactory
    Export
    类型的bean,搜索失败


是的,那只是我简化并忘记更改粘贴的代码。工作代码具有正确的限定符。@unsquared-no,您的异常告诉我们-
限定符(value=exportFactory)}
@Bozho,在发布到SO之前,我正在复制并粘贴到记事本中。我更改了xml和stacktrace中的值,但忘记了限定符。@unsquared-好的,我使用正确的限定符。因此,请仔细检查您是否有正确的限定符,并给出相应的异常message@Bozho你说得对,斯图pid错误。我接受了axtavt的答案,因为这不会帮助任何比我少脑死亡的人,并且会处理一个有趣的Spring功能。这可以解释为什么我调用exportFactory().getObject()正在返回ObjectFactoryCreatingFactoryBean$TargetBeanObjectFactory的实例,该实例在强制转换时将返回预期的ExportImpl。有趣的是,我在运行spring-3.0.2时使用了spring-context-2.5.xsd和spring-beans-2.5.xsd。我将架构位置更改为3.0,问题就消失了。是的,进行了注释使用id=“exportFactory”输出bean也完成了。谢谢。@axtavt-如果您使用Bozho描述的@Qualifier,您可以保留@Autowired,Spring实际上会返回预期的bean。@unsquared:是的,因为在这种情况下Spring会查找名为
Export
类型的bean,并成功地找到它,忽略不必要的
exportfact>ry
@Autowired
@Qualifier("exportFactory")
private ObjectFactory<Export> exportFactory;
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.someorg.Export] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=exportFactory)}
@Qualifier("export")