是否可以在外部文件中为Spring Framework指定类名?

Chr*_*son 7 java spring

我有一个基于Spring Framework的应用程序,它使用外部属性文件来处理数据库主机字符串,用户名和密码等内容,以便我们可以将配置文件检查到我们的存储库(它的开源)并且不会损害数据库的安全性.它也很棒,因为开发人员可以保留自己的文件副本,应用程序将自动使用其系统上的配置,而不必手动重新配置.

我希望能够以相同的方式指定一个bean.我们正在处理一些可能从开发人员转变为开发人员的类,如果我们允许他们在不同的文件中指定这些信息,那么他们就不会乱用主配置文件.

为了给你一个想法,我们有类似的东西

<property name="url">
  <value>${db.host}</value>
</property>
Run Code Online (Sandbox Code Playgroud)

其中db.host在另一个文件中指定的位置.我们想要的是什么

<bean name="ourBean" class="${class.weneed}" />
Run Code Online (Sandbox Code Playgroud)

上面的语法实际上并不起作用,但这证明了我们想要做的事情.

提前致谢!

克里斯

ska*_*man 7

你可以使用一个FactoryBean.这个例子FactoryBean利用了Spring Class在注入属性时将类名转换为对象的能力:

public class MyFactoryBean extends AbstractFactoryBean {

    private Class targetClass;

    public void setTargetClass(Class targetClass) {
        this.targetClass = targetClass;
    }

    @Override
    protected Object createInstance() throws Exception {
        return targetClass.newInstance();
    }

    @Override
    public Class getObjectType() {
        return targetClass;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后:

<bean name="ourBean" class="com.xyz.MyFactoryBean">
   <property name="targetClass" value="${class.weneed}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

Spring上下文现在将有一个名为ourBeanobject的对象bean${class.weneed}