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

标签 java spring

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

相关文章:

java - 如何使用 Maven 创建最小 Java 应用程序的框架?

java - Spring集成多个客户端连接到服务器端口

Spring Boot + Spring OAuth Java配置

java - 带有 thymeleaf 国际化的 Spring 4 无法识别来自资源属性文件的消息

spring - @PostConstruct 方法在 flyway 之前运行

java - NoClassDefFoundError 和 ClassNotFoundException 之间的区别?

java - Spring Security 如何通过各种 session 创建和 session 固定组合来处理 JSESSIONID?

java - 错误java。我不知道如何修复它

java - 如何制作不区分大小写的 ConcurrentMap?

java - 一段时间后,Spring Boot 内存使用率高