基于XML的Spring配置中的动态Spring Bean创建

时间:2013-11-05 20:21:44

标签: spring spring-bean

我正在使用基于xml的Spring bean配置。对于某些bean,我想根据不同的配置动态加载类。 (我可以为这些类创建一个父类)

目前我有一个解决方案:

  1. 使用系统属性标签动态加载类
  2. <bean id="dynamicBean" class="com.xyz.${MODEL}MyBeanClass"/>
    

    其中MyBean类是在不同的包名下创建的,$ {MODEL}将设置为相应的包名称,例如“mypackage的。”在运行时。

    上面的解决方案工作正常,但我不认为这是在xml-base spring config中动态初始化bean的常见做法。

    这种方法的任何缺点?更重要的是,实现同样目标的替代方法是什么。

1 个答案:

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