如何注入一个对象类,而不是一个对象本身

时间:2014-05-12 08:22:02

标签: spring class inject factory-method

我正在尝试注入一个Class列表。我想要一个类列表,而不是对象。

我的班级看起来像这样:

public class CodeServiceImpl{

    private List<Class<?>> codeList;

// getter and setter

我的弹簧配置文件(我没有使用注释,但是xml)是

<bean id="myCodeServiceImpl" class = "net.croz.service.CodeServiceImpl">
        <property name="codeList">
            <list>
                <ref bean="myAddress"/>
                <ref bean="myCity"/>
                <ref bean="myCountry"/>
            </list>
        </property>
    </bean>


    <bean id="myAddress" class="java.lang.Class" factory-method="forName">
            <constructor-arg value="net.croz.model.Address"/> 
        </bean>

        <bean id="myCity" class="java.lang.Class" factory-method="forName">
            <constructor-arg value="net.croz.model.City"/> 
        </bean>

        <bean id="myCountry" class="java.lang.Class" factory-method="forName">
            <constructor-arg value="net.croz.model.Country"/>
        </bean>

但是没有填充列表codeList。它最终成为一个空对象。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

实际上它的工作原理是:

<bean class="com.my.proj.Foo">
        <constructor-arg value="java.lang.String, org.springframework.util.StringUtils, byte[]"/>
</bean>

其中Foo是:

public class Foo {

    private final List<Class<?>> codeList;

    public Foo(Class<?>... codeList) {
        this.codeList = Arrays.asList(codeList);
    }

}

ConversionService执行将逗号分隔的字符串转换为Class<?>[]并尝试使用BeanClassLoader

自行解析每个类的内容