我有一个基于 Spring Framework 构建的应用程序,它使用外部属性文件来处理数据库主机字符串、用户名和密码等内容,以便我们可以将配置文件 checkin 我们的存储库(它是开源的)而不危及安全性分贝。这也很棒,因为开发人员可以保留他们自己的此文件副本,应用程序将自动使用他们系统上的配置,而不必手动重新配置。
我希望能够以相同的方式指定一个 bean。我们正在处理一些可能因开发人员而异的类,如果我们可以允许他们在不同的文件中指定此信息,这样他们就不必弄乱主配置文件,那就太好了。
为了给你一个想法,我们有类似的东西
<property name="url">
<value>${db.host}</value>
</property>
在另一个文件中指定了 db.host。我们想要的是像
<bean name="ourBean" class="${class.weneed}" />
上面的语法实际上不起作用,但这演示了我们想要做什么。
提前致谢!
克里斯
最佳答案
您可以使用 FactoryBean
为了这。此示例是一个 FactoryBean
,它利用了 Spring 在注入(inject)属性时将类名转换为 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;
}
}
然后:
<bean name="ourBean" class="com.xyz.MyFactoryBean">
<property name="targetClass" value="${class.weneed}"/>
</bean>
Spring 上下文现在将有一个名为 ourBean
的 bean,它是 ${class.weneed}
类型的对象
关于java - 是否可以在外部文件中为 Spring Framework 指定类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209010/