如何在spring中注入Class []数组?

时间:2014-03-26 07:59:56

标签: spring dependency-injection inversion-of-control

我有一个有静态方法newInstance(Class[] classes, List properties)的类,我需要Spring才能使用这个类来实例化实例。

到目前为止,我在XML配置中得到的是:

<bean id="jaxbContext" scope="prototype" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
    <constructor-arg>
        <list>
            <value type=">com.company.pas.entity.Partner.class</value>
        </list>
    </constructor-arg>
    <constructor-arg>
        <list>
            <value>com/company/pas/entity/mapping/partner-pojo2xml.xml</value>
        </list>
    </constructor-arg>
</bean>

                    

这会引发以下异常。请注意,它抱怨它无法找到newInstance方法,但我认为这是因为它找不到具有与配置匹配的签名的newInstance方法。我怀疑Spring将类列表解释为java.lang.String,而不是Class

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jaxbContext' defined in class path resource [com/company/pas/context/mappingContext.xml]: No matching factory method found: factory method 'newInstance'. Check that a method of the specified name exists and that it is static.
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:500)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:964)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:870)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:309)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
    ... 46 more

如何让Spring根据配置文件注入Class[]数组?

1 个答案:

答案 0 :(得分:1)

JAXBContext.newInstance()有这个重载:

newInstance(String contextPath)
newInstance(String contextPath,ClassLoader classLoader)
newInstance(Class... classesToBeBound)
newInstance(Class[] classesToBeBound,Map<String,?> properties)
newInstance(String contextPath,ClassLoader classLoader,Map<String,?> properties)

说实话,我找不到newInstance(Class[] classes, List properties)重载,所以当告诉你它无法找到newInstance()方法时,春天是正确的