java - Spring 的 ObjectFactoryCreatingFactoryBean 可以与引用接口(interface)的泛型一起工作吗?

标签 java spring

我正在使用 Spring 的 ObjectFactoryCreatingFactoryBean 来检索原型(prototype)作用域 bean,如 Spring Documentation 中所述.下面是我的 applicationContext。

<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 Autowiring 到类中,如下所示:

@Autowired
@Qualifier("exportFactory")
private ObjectFactory<?> exportFactory;

这按预期工作。每次调用 exportFactory.getObject() 方法都会返回一个新的 ExportImpl。进一步检查,对 getObject() 的调用实际上返回以下实例:org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean$TargetBeanObjectFactory

现在,ExportImpl 是一个Export 接口(interface)的实现。当我尝试使用泛型声明 exportFactory 时,如下所述,我得到一个异常。

@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)}

应用程序上下文使用此配置成功加载,当我调用 exportFactory.getObject() 时抛出异常。使用相同的配置,我可以成功检索 ExportImpl 的实例,因此我知道 bean 已正确连接。

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

最佳答案

事实证明ObjectFactoryCreatingFactoryBean当您获得 ObjectFactory 时不需要通过@Autowired .在这种情况下 ObjectFactory因为你的 bean 是自动创建的,尽管我在文档中找不到任何关于这种行为的引用。

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

  • 当你写 @Autowired @Qualifier("exportFactory") ObjectFactory<?> , Spring 创建 ObjectFactory返回一个名为 exportFactory 的 bean ,它本身就是一个 ObjectFactoryObjectFactoryCreatingFactoryBean 返回(它的类是 org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean$TargetBeanObjectFactory )。

  • 当你写 @Autowired @Qualifier("exportFactory") ObjectFactory<Export> , Spring 试图找到 Export 类型的 bean名为 exportFactory , 搜索失败。

关于java - Spring 的 ObjectFactoryCreatingFactoryBean 可以与引用接口(interface)的泛型一起工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000102/

相关文章:

java - java中计算一个数除以另一个数的次数并打印出来

java - 运行 jsp 时无法转换为 hibernate.Hibernate Session

java - RequestMappings 根本不起作用

java - 如何将多维数组中的元素相加?

java - java中如何使用BufferedWriter进行socket通信?

java - 在xml中添加xmlns =""

java - 如何保护 REST Web 服务?

java - Hibernate异常: Unable to get the default Bean Validation factory with JRE 7

java - JPA 对象引用未保存的 transient 实例 - 在刷新之前保存 transient 实例

java - 在 Spring Boot 中使用 Java 配置在 bean 定义之外为 bean 别名