假设有一个类具有任意数量的参数的构造函数,如下所示:
public ClassA(URI ... uri){
//contruct object
}
传递给ClassA构造函数的URI对象的数量可能会有所不同,具体取决于配置文件中定义的值的数量(可以是一对多的URI)。
我应该如何在Spring XML中定义ClassA bean?
答案 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>