简体   繁体   English

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

[英]Invoke Java Constructor with Arbitrary number of argument in Spring XML

Assume that there is a class having constructor with arbitrary number of arguments like this: 假设有一个类的构造函数带有任意数量的参数,如下所示:

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

The number of URI objects to pass into ClassA's constructor may varies depending on number of values defined in config file (can be one to many URIs). 传递给ClassA的构造函数的URI对象的数量可能会有所不同,具体取决于配置文件中定义的值的数量(可以是一个或多个URI)。

How should I define a ClassA bean in Spring XML? 如何在Spring XML中定义ClassA bean?

Use the FactoryBean interface: 使用FactoryBean接口:

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

Basically define of bean of that type. 基本上定义该类型的bean。 Something like this: 像这样:

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

And then: 接着:

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;
   }
}

You may have to inject the "uris" properties as String and then converting if there's no converter provided by Spring. 如果Spring没有提供转换器,您可能必须将“ uris”属性注入为String,然后进行转换。 Or hook your own URI converter. 或挂钩您自己的URI转换器。

The following configuration works fine: 以下配置可以正常运行:

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM