在Spring XML中使用任意数量的参数调用Java构造函数

时间:2016-06-15 04:00:38

标签: java spring

假设有一个类具有任意数量的参数的构造函数,如下所示:

public ClassA(URI ... uri){
    //contruct object
}

传递给ClassA构造函数的URI对象的数量可能会有所不同,具体取决于配置文件中定义的值的数量(可以是一对多的URI)。

我应该如何在Spring XML中定义ClassA bean?

2 个答案:

答案 0 :(得分:1)

使用FactoryBean接口:

public interface FactoryBean<T> {
  T getObject() throws Exception;
  Class<T> getObjectType();
  boolean isSingleton();
}

基本上定义该类型的bean。像这样:

<bean id="classA" class="ClassAFactoryBean"/>

然后:

public class ClassAFactoryBean implements FactoryBean<ClassA> {

   @Value("${uris}")
   URI[] uris;

   ClassA getObject() throws Exception {
       return new ClassA(uris);
   }

   Class<T> getObjectType() {
       return ClassA.class;
   }

   boolean isSingleton() {
       return true;
   }
}

您可能必须将“uris”属性注入String,然后在Spring没有提供转换器的情况下进行转换。或者挂钩你自己的URI转换器。

答案 1 :(得分:0)

以下配置正常:

<beans>
  <bean id="ClassA" class="ClassA">
      <constructor-arg ref="uri"/>
   </bean>

   <bean id="uri" class="URI"/>
</beans>