我编写了一个简单的FileListFactory来实现FactoryBean并返回一个表示给定文件中的行的字符串列表。暂时搁置一边 - 如果我们解决了< list>的问题,那么我假设我可以在其位置插入一个参考这个工厂的输出。
我想要的是“foo”对象的列表。 foo对象是某些bean的非单例实例(可能带有抽象bean定义)。创建的每个foo对象都将其中一个列表项作为属性。
为了进一步提高一个级别,所讨论的属性是一个“条形”对象。我已经创建了一个属性编辑器来从字符串中创建“bar”对象。因此,在设置每个实例属性时,迭代字符串列表的事物应该使用属性编辑器基础结构。
似乎应该有某种列表工厂迭代器bean或其他东西。问题似乎是我正在寻找的所有搜索示例解决方案都失败了,因为像“list”这样的术语过于通用了。
答案 0 :(得分:0)
如果我理解正确,你有一个字符串列表(例如从文件中读取)。对于每个字符串,您要创建一个“foo”对象,其中给定的字符串分配给“bar”属性,并进行适当的转换。
您可以通过实施自己的BeanFactoryPostProcessor
来实现这一目标。对于每个字符串,创建一个新的BeanDefinition
并将其注册到目标工厂。为简化起见,请创建并注册ChildBeanDefinition
,提供具有所有通用配置的“父”bean的名称,并仅设置“bar”属性。
答案 1 :(得分:0)
我从来没有回过头来记录我最终结果。
神奇的是,遍历列表的工厂对象是 abstract 。它有一个抽象方法,返回" foo"的实例。在这种情况下:
public abstract Foo createFoo();
尽管这是一个抽象类,但您在Spring XML配置中创建了它的具体实例,但在XML中有一个额外的子节点,如下所示:
<bean id="Santa" class="...">
<lookup-method name="createFoo" bean="fooFactory"/>
...
</bean>
&#34; fooFactory&#34; bean是一个出售Foo对象的工厂。
最终结果是,通过Spring IoC的魔力,你得到的是一个匿名对象,它是抽象类的具体实例,包括引用工厂bean的抽象方法的实现。
Santa类代码只需获取List,迭代它,调用createFoo()获取Foo,然后根据需要调用Foo.setBar()。
Mischief管理好了!