gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:15 25 4
gpt4 key购买 nike

我有一个基于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com