假设有一个类,其构造函数具有任意数量的参数,如下所示:
public ClassA(URI ... uri){
//contruct object
}
传递到 ClassA 构造函数中的 URI 对象的数量可能会根据配置文件中定义的值的数量而变化(可以是一对多的 URI)。
我应该如何在 Spring XML 中定义 ClassA bean?
最佳答案
使用FactoryBean接口(interface):
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;
}
}
如果 Spring 没有提供转换器,您可能必须将“uris”属性作为字符串注入(inject),然后进行转换。或者 Hook 您自己的 URI 转换器。
关于java - 在 Spring XML 中使用任意数量的参数调用 Java 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37825876/