我正在使用基于xml的Spring bean配置。对于某些bean,我想根据不同的配置动态加载类。 (我可以为这些类创建一个父类)
目前我有一个解决方案:
<bean id="dynamicBean" class="com.xyz.${MODEL}MyBeanClass"/>
其中MyBean类是在不同的包名下创建的,$ {MODEL}将设置为相应的包名称,例如“mypackage的。”在运行时。
上面的解决方案工作正常,但我不认为这是在xml-base spring config中动态初始化bean的常见做法。
这种方法的任何缺点?更重要的是,实现同样目标的替代方法是什么。
答案 0 :(得分:1)
使用FactoryBean
<bean class="ClzInitFactoryBean">
<property name="clz" value="com.xyz.${MODEL}MyBeanClass" />
</bean>
ClzInitFactoryBean.java
public class ClzInitFactoryBean implements FactoryBean {
public void setClz(String clz) throws ClassNotFoundException {
clazz = Class.forName(clz);
}
private String clz;
private Class<?> clazz;
public Object getObject() throws Exception {
return BeanUtils.instantiateClass(clazz);
}
public Class getObjectType() {
return clazz;
}
public boolean isSingleton() {
return false;
}
}