我有一个基于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)
上面的语法实际上并不起作用,但这证明了我们想要做的事情.
提前致谢!
克里斯
你可以使用一个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上下文现在将有一个名为ourBean
object的对象bean${class.weneed}
归档时间: |
|
查看次数: |
2810 次 |
最近记录: |