在 spring 中使用 属性-占位符和 beanfactory
using property-placeholder with beanfactory in spring
配置如下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 使其工作?
提前致谢。
当对 bean 属性使用 XML 声明时,属性-placeholder 被注册为 Bean Factory Post Processor
对于 IoC 容器,因此您将拥有可用的属性值。
但是,当通过 BeanFactory
以编程方式实例化 bean 时,除非您将 `` 配置为它的 post 处理器,否则该工厂不会知道属性值:
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
接受 org.springframework.core.io.Resource
作为其参数,即您可以根据需要使用其任何具体子实现:
org.springframework.core.io.FileSystemResource
: 支持文件句柄的实现。
org.springframework.core.io.ClassPathResource
: 类路径资源的实现。
org.springframework.core.io.InputStreamResource
:InputStream
... 的实现
配置如下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 使其工作?
提前致谢。
当对 bean 属性使用 XML 声明时,属性-placeholder 被注册为 Bean Factory Post Processor
对于 IoC 容器,因此您将拥有可用的属性值。
但是,当通过 BeanFactory
以编程方式实例化 bean 时,除非您将 `` 配置为它的 post 处理器,否则该工厂不会知道属性值:
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
接受 org.springframework.core.io.Resource
作为其参数,即您可以根据需要使用其任何具体子实现:
org.springframework.core.io.FileSystemResource
: 支持文件句柄的实现。org.springframework.core.io.ClassPathResource
: 类路径资源的实现。org.springframework.core.io.InputStreamResource
:InputStream
... 的实现