创建Set <class <?>&gt; </class <?>类型的bean

时间:2009-10-06 22:41:06

标签: spring

如何创建Class类型的bean?

我找到了一种使用getClass()的方法,但这需要一个实例,并且不能通过factory-method使用,因为它不是静态的。它还需要为此明确目的创建一个无关的bean:

<bean id="foo" class="Foo" />
<bean id="fooClass" factory-bean="foo" factory-method="getClass" />

如果Foo类易于构造,这不是很糟糕,但如果构造函数需要参数怎么办?

然后我需要创建一个Set类来通过属性连接到另一个bean。我会创建如下的集:

<util:set id="classSet">
    <ref local="fooClass"/>
</util:set>

2 个答案:

答案 0 :(得分:5)

如果你真的想做你描述的事情,那么你可以这样做:

<bean id="myClass" class="java.lang.Class" factory-method="forName">
   <constructor-arg value="com.MyClass"/>
</bean>

但正如@ ChssPly76所说,如果你想将它注入另一个bean,你只需要注入类名,Spring会自动将它转换为一个类实例。

答案 1 :(得分:4)

你为什么这样?你能提供一个实际需要的例子吗?

如果您只需要将它作为依赖项(例如,其他一些bean具有Class类型的属性),Spring的内置ClassEditor属性编辑器会将常规字符串转换为具有该名称的Class实例:

<property name="someClass" value="java.lang.String"/>

上面的结果会导致setSomeClass(Class clazz) setter被调用bean的属性为。