当前位置: 首页 > 面试题库 >

春季:获取FactoryBean对象而不是FactoryBean.getObject()

米修平
2023-03-14
问题内容

简短的问题:
如果我有可以继承FactoryBean接口的类,那么如何从FactoryBean对象本身而不是FactoryBean.getObject()获得数据?

长问题: 我必须使用基于第三方Spring的库,而该库几乎不使用FactoryBean接口。现在,我总是必须配置2个bean:

<!-- Case 1-->
<bean id="XYZ" class="FactoryBean1" scope="prototype">
    <property name="steps">
        <bean class="FactoryBean2">
            <property name="itemReader" ref="aName"/>
        </bean>
    </property>
</bean>

<bean id="aName" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.ABC"/>
    </property>
</bean>

<!-- Case 2-->
<bean id="XYZ2" class="FactoryBean1" scope="prototype">
    <property name="steps">
        <bean class="FactoryBean2">
            <property name="itemReader" ref="aName2"/>
        </bean>
    </property>
</bean>

<bean id="aName2" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.QWE"/>
    </property>
</bean>

实际上,名称为“ XYZ”(与“ XYZ2”比较)的bean的定义永远不会更改,但是由于工厂性质,我必须为每个配置复制代码。名称为“
aName”的bean的定义始终是新的(即,每个配置将具有自己的objectContext值)。

我想简化具有单个工厂bean的配置(删除“ XYZ2”并摆脱对“ aName”的链接):

<bean id="XYZ" class="FactoryBean1" scope="prototype">
    <property name="steps">
        <bean class="FactoryBean2"/>
    </property>
</bean>

<bean id="aName" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.ABC"/>
    </property>
</bean>


<bean id="aName2" class="com.package.ClassName1" scope="prototype">
    <property name="objectContext">
        <bean class="com.package.QWE"/>
    </property>
</bean>

不幸的是,这并不像我期望的那么简单。我想在运行时将工厂(即示例中的XYZ bean)与必要的对象(即“ aName”,“
aName2”)粘合在一起。这种方法行不通,因为当我向Spring请求FactoryBean对象时,它会返回给我FactoryBean.getObject(),由于缺少itemReader值,当时无法实例化。

我希望SpringSource预见到我的情况,我可以调用homeBean.getObject()来在运行时提供所有必要的属性。

另一个使我感到不安的复杂性是工厂链(Factory1从Factory2获取一个对象,我必须在运行时对其进行“挂钩”)。

任何想法将不胜感激。


问题答案:

它是&(与号),而不是符号,请参阅Spring
Framework文档:使用FactoryBeans自定义实例化逻辑

<property name="factoryBean" ref="&amp;theFactoryBean" />


 类似资料:
  • 问题内容: 我想使用BeanFactory创建bean,但是我得到了一个感悟:。 他使用这个 ApplicationContext ctx = new FileSystemXmlApplicationContext(“ classpath *:/ WEB-INF / businesscaliber-servlet.xml”); 问题答案: 我相信您需要指定一个绝对路径,而不是Web应用程序的相对路

  • 问题内容: 我想使用BeanFactory创建bean,但是我得到了一个感悟:。 他使用这个 ApplicationContext ctx = new FileSystemXmlApplicationContext(“ classpath *:/ WEB-INF / businesscaliber-servlet.xml”); 问题答案: 我相信您需要指定一个绝对路径,而不是Web应用程序的相对路

  • 我有一个方法,它应该从JSON返回不同的对象,这取决于参数中的类类型。我试着根据参数返回一个对象列表,但是我只把LinkedHashMap放入ArrayList。 我搜索了很多,但是在解决方案中,类类型的所有地方都是硬编码的。 有没有一种不用硬代码就能解决这个问题的方法? 我只想传递类类型并通过一个方法获取对象。 当我的对象有关系时,我得到这个例外 无法识别的字段"字段"(类model.orm.部

  • 我有一个带有 RestAssured 的测试自动化宠物项目,我想让它在架构上开发,以便使代码可重用,测试脚本易于阅读。我有表示API的请求和响应的类,我也有DTO类。例如,下面是一个与终结点一起使用的类: 如您所见,有一个父类< code > EndpointTechnicalSteps ,我想用它来处理来自endpoint的响应。例如,我想在< code > endpoint technical

  • 问题内容: 我想做的是从而不是从Volley库中使用一些数据。 以下是用于从服务器中获取JSON对象的代码。 我试图改变到后改为。但这并没有解决。 问题答案: 中的url 不是可选的,并且JSONObject参数用于将带有请求的参数发布到url。 从文档中:http : //afzaln.com/volley/com/android/volley/toolbox/JsonObjectRequest

  • 我试图获取一个结果集并将其强制转换为bean。不起作用。但后来我试着向bean列表进行了强制转换,它起作用了。有人能告诉我如何使用Jdbctemplate和RowMapping直接获取Bean对象吗? 如果有没有行映射器的其他解决方案,那就更好了。因为在表中,我有50+列,所以很难创建具有这些字段的Bean