0

使用以下 XML 配置

<context:property-placeholder location="constants.properties"/>

<bean id="MyDBDetails"
    class="itsmine.springcore.MyDBDetails" scope="singleton">
    <property name="fName" value="${fName}" />
    <property name="lName" value="${lName}" />
    <property name="age" value="${age}" />
</bean>

我使用以下 2 个选项在我的 main 中创建了一个 bean:1)使用 ClassPathXmlApplicationContext 2)使用 bean 因子

动态值是在使用 ClassPathXmlApplicationContext 创建 bean 时设置的,但不是在使用 bean factory 创建时设置的。

您能否建议如何使用 bean factory 使其工作?

提前致谢。

4

1 回答 1

0

当对 bean 属性使用XML声明时, property-placeholder被注册为Bean Factory Post ProcessorIoC 容器,因此您将拥有可用的属性值。

但是,当通过 a 以编程方式实例化 bean 时BeanFactory,除非您将 `` 配置为它的后处理器,否则该工厂不会知道属性值:

BeanFactory factory = /* your factory initialized */;
PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
cfg.setLocation(new FileSystemResource("constants.properties"));
cfg.postProcessBeanFactory(factory);

编辑

请注意,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#setLocation接受 aorg.springframework.core.io.Resource作为其参数,即您可以根据需要使用其任何具体子实现:

  • org.springframework.core.io.FileSystemResource:支持文件句柄的实现。
  • org.springframework.core.io.ClassPathResource:类路径资源的实现。
  • org.springframework.core.io.InputStreamResource: 一个实现InputStream...
于 2016-12-13T15:32:43.300 回答