博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring框架下PropertyPlaceholderConfigurer类
阅读量:4068 次
发布时间:2019-05-25

本文共 6814 字,大约阅读时间需要 22 分钟。

<p><span style="text-decoration: underline;">它的作用是一个资源属性的配置器,能够将BeanFactory的里定义的内容放在一个以.propertis后缀的文件中.</span></p>
<p></p>
<p>要了解这个类首先要弄清楚一个概念:bean factory post-processor<br>官方解释是这样的:<br>A bean factory post-processor is a java class which implements the<br>org.springframework.beans.factory.config.BeanFactoryPostProcessor interface. It is executed manually (in the case of the BeanFactory) or automatically (in the case of the ApplicationContext) to apply changes of some sort to an entire BeanFactory, after it has been constructed.<br>我理解的意思是这样的:<br>1.首先bean factory post-processor实现了org.springframework.beans.factory.config.BeanFactoryPostProcessor接口。<br>2.在BeanFactory的情况下它被手动的执行。<br>3.在ApplicationContext的条件下它会自动的执行。<br>4.最关键的一点是,是在一个类的实例被构造出来之后,对整个BeanFactory进行修改。</p>
<p>--------------------------------------------------------------------------------------------------------------------------------</p>
<p><span style="color: #003300;">文章来自:</span><a href="http://hi.baidu.com/fytcm/blog/item/756acffdcff2541508244d2d.html"><span style="color: #003300;">http://hi.baidu.com/fytcm/blog/item/756acffdcff2541508244d2d.html</span></a></p>
<p>
</p>
<table border="0"><tbody><tr>
<td>
<div class="cnt">
<span style="font-size: x-small;"><span style="font-size: xx-small;">Spring的框架中为您提供了一个 </span></span><a href="http://caterpillar.onlyfun.net/GossipCN/SpringGossip/BeanFactoryPostProcessor.html"><span style="font-size: x-small;"><span style="font-size: xx-small;">BeanFactoryPostProcessor</span></span></a><span style="font-size: xx-small;"><span style="font-size: x-small;"> 的实作类别: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。藉由这个类别,您可以将一些组态设定,移出至.properties档案中,如此的安排可以让XML定义档负责系统相关设定,而.properties档可以作为客户根据需求,自定义一些相关的参数。</span><br><span style="font-size: x-small;">来看一个Bean定义档的实际例子:</span></span> <br><ul>
<li>beans-config.xml </li>
</ul>
<pre><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<span style="font-weight: bold;"> <bean id="configBean"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> </span>
<span style="font-weight: bold;"> <property name="location"> </span>
<span style="font-weight: bold;"> <value>hello.properties</value> </span>
<span style="font-weight: bold;"> </property> </span>
<span style="font-weight: bold;"> </bean> </span>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord">
<value><span style="font-weight: bold;">${onlyfun.caterpillar.helloWord}</span></value>
</property>
</bean>
</beans></pre>
<br><span style="font-size: x-small;"><span style="font-size: xx-small;">假设在helloBean中有许多依赖注入的属性,这些都是比较不常变动的属性,而其中helloWord会经常变动,可以透过hello.properties来简单的设定,而这个资讯已设定在configBean的location属性中: <br></span></span>
<ul>
<li>hello.properties </li>
</ul>
<pre>onlyfun.caterpillar.helloWord=Welcome!</pre>
<br><span style="font-size: x-small;"><span style="font-size: xx-small;">在helloBean的helloWord属性中,${onlyfun.caterpillar.helloWord}将会被hello.properties的helloWord所取代。<br><br>如果有多个.properties档案,则可以透过locations属性来设定,例如:</span></span> <br><ul>
<li>beans-config.xml </li>
</ul>
<pre><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<span style="font-weight: bold;"> <bean id="configBean"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
</span><span style="font-weight: bold;"> <property name="locations"> </span>
<span style="font-weight: bold;"> <list></span>
<span style="font-weight: bold;"> <value>hello.properties</value>
</span><span style="font-weight: bold;"> <value>welcome.properties</value>
</span><span style="font-weight: bold;"> <value>other.properties</value> </span>
<span style="font-weight: bold;">
</span><span style="font-weight: bold;"> </list></span>
<span style="font-weight: bold;"> </property> </span><span style="font-weight: bold;"></span>
<span style="font-weight: bold;"> </bean> </span>
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean">
<property name="helloWord">
<value><span style="font-weight: bold;">${onlyfun.caterpillar.helloWord}</span></value>
</property>
...
</bean>
</beans></pre>
<pre> </pre>
<pre>======================================</pre>
<pre><strong><span style="background-color: #ffff66;">PropertyPlaceholderConfigurer</span></strong>类就是bean factory post-processor的一种,它的作用是一个资源属性的配置器,能够将BeanFactory的里定义的内容放在一个以.propertis后缀的文件中。
例如</pre>
<pre>---<span style="color: #ff0000;">spring-context.xml</span>----
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.<strong style="color: black; background-color: #ffff66;">PropertyPlaceholderConfigurer</strong>">
<property name="locations">
<list>
<value>/WEB-INF/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>${driver}</value></property>
<property name="url"><value>jdbc:${dbname}</value></property>
</bean></pre>
<pre>而实际的<span style="color: #ff0000;">jdbc.propertis</span>文件是
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
而jdbc.propertis是怎样引用的呢:</pre>
<pre> </pre>
<pre>将上边一段配置注册在<span style="color: #ff0000;">web.xml</span>中就可以了
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-context.xml</param-value>
</context-param>
当然,不要忘了spring的监听器注册
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
这样,一个简单的数据源就设置完毕了。
实际上,<strong style="color: black; background-color: #ffff66;">PropertyPlaceholderConfigurer</strong>起的作用就是将占位符指向的数据库配置信息放在bean中定义
的工具。</pre>
</div>
</td>
</tr></tbody></table>
<p>如果要在BeanFactory中使用,bean factory post-processor必须手动运行:</p>
<pre class="programlisting">XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));<br>PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();<br>cfg.setLocation(new FileSystemResource("jdbc.properties"));<br>cfg.postProcessBeanFactory(factory);</pre>
<p>注意,ApplicationContext能够自动辨认和应用在其上部署的实现了BeanFactoryPostProcessor的bean。这就意味着,当使用ApplicationContext的时候应用PropertyPlaceholderConfigurer会非常的方便。由于这个原因,建议想要使用这个或者其他bean factory postprocessor的用户使用ApplicationContext代替BeanFactroy。 </p>
<p><tt class="literal">PropertyPlaceHolderConfigurer</tt>不仅仅在你指定的Porperties文件中查找属性, 如果它在其中没有找到你想使用的属性,它还会在Java的系统properties中查找。 这个行为能够通过设置配置中的<tt class="literal">systemPropertiesMode</tt> 属性来定制。这个属性有三个值, 一个让配置总是覆盖,一个让它<span class="emphasis"><em>永不</em></span>覆盖,一个让它仅在properties文件中找不到的时候覆盖。 请参考 PropertiesPlaceholderConfigurer的JavaDoc获得更多信息。 </p>

转载地址:http://acaji.baihongyu.com/

你可能感兴趣的文章
hd cdnServer 51cdn / ChinaCache / ATS / Apache Traffic Server
查看>>
project web architecture
查看>>
OS + Unix HP-UX
查看>>
OS + Unix Solaris / openSolaris
查看>>
db sql montior
查看>>
Unix + SCO UnixWare
查看>>
db db2 books
查看>>
read humor_campus
查看>>
my read_soft
查看>>
my pdfs
查看>>
framework Schedule Quartz
查看>>
IBM WebSphere Commerce Analyzer
查看>>
Unix + OS IBM Aix System Director
查看>>
Unix + OS IBM Aix FTP / wu-ftp / proftp
查看>>
framework apache commons
查看>>
my read work
查看>>
blancerServer IBM WebSphere Edge Server 6.1
查看>>
db db2 base / instance database tablespace container
查看>>
my read _job
查看>>
hd disk / disk raid / disk io / iops / iostat / iowait / iotop / iometer
查看>>