论坛首页 Java企业应用论坛

Spring PropertySource 学习

浏览 3838 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-12-02   最后修改:2012-12-02
PropertySource 是PropertySources 容器唯一可存储的元素。
PropertySources  定义了一个接口:
1:根据key,得到value
2:遍历整个容器
PropertySources 在SPRING 中的唯一实现是MutablePropertySources,
MutablePropertySources 不仅实现借口定义的两个功能,还增加了可以插入,删除,替代的功能,
并且,插入是有优先级概念的,这意味着PropertySource 在PropertySources中的插入顺序不是固定的,
因此实际是MutablePropertySources内部采用的数据结构是链表形式的LinkedList

虽然容器PropertySources提供了基本的查找功能.但是查找效率不高:
	
public PropertySource<?> get(String name) {
		return this.propertySourceList.get(this.propertySourceList.indexOf(PropertySource.named(name)));
	}

首先新建一个ComparsionPropertySource对象:PropertySource.named(name)
然后遍历这个List,找出该对象的位置,
最后再一次遍历LIST,返回对应位置的PropertySources。

Spring 又提供一个专门用来查找Property的接口 PropertyResolver。
这个接口最重要的是提供了property value 的类型转换接口。
该接口的一个实现PropertySourcesPropertyResolver ,重新实现了在PropertySources中查找PropertySource的接口,增加了对PlaceHolder的解析的接口。

PropertyResolver 的主要目的就是查找配置(.properties,环境变量)
PropertySource 则用途更全面。
奇怪的是PropertySource 被设计为abstract class,而PropertyResolver
被设计成interface。
   发表时间:2012-12-02  
引用
PropertyResolver 的主要目的就是查找配置(.properties,环境变量)
PropertySource 则用途更全面。
奇怪的是PropertySource 被设计为abstract class,而PropertyResolver
被设计成interface。

我认为:
1、PropertyResolver:它是面向客户的,即设计给第三方(陌生人)使用的,所以设计成接口肯定是合理的;
2、PropertySource:表示一个name/value属性对集,代表了值,一般作为PropertyResolver实现的一个delegate使用,所以它一般不直接面向客户使用,我认为没必要设计成接口。即使设计成接口,它也需要设计一个抽象类来复用一些共性代码,因为是朋友关系,所以直接抽象类即可吧。
请猛拍。
0 请登录后投票
   发表时间:2012-12-03  
作者的头像很有爱啊
0 请登录后投票
   发表时间:2012-12-04  
自己以前写了个读取配置文件里面的,利用的placeholder加载的配置文件,


<beans profile="development">
		<context:property-placeholder ignore-resource-not-found="true"
			location="classpath*:/application.properties,
          			  classpath*:/application.development.properties" />	

		<!-- DBCP连接池 -->
		<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
			<property name="driverClassName" value="${jdbc.driver}" />
			<property name="url" value="${jdbc.url}" />
			<property name="username" value="${jdbc.username}" />
			<property name="password" value="${jdbc.password}" />
			<property name="defaultAutoCommit" value="false" />
		</bean>
	</beans>



<!-- configKeys-->
	<bean id="configKeys" class="com.unionpay.common.utils.ConfigKeys">
		<property name="keys">
			<props>
				<prop key="portal.login.url">${portal.login.url}</prop>
				<prop key="app.share.disk">${app.share.disk}</prop>
				<prop key="attrDir.initproject">${attrDir.initproject}</prop>
				<prop key="attrDir.disk.initproject">${attrDir.disk.initproject}</prop>
				<prop key="attrDir.meeting">${attrDir.meeting}</prop>
				<prop key="attrDir.disk.meeting">${attrDir.disk.meeting}</prop>
				<prop key="attrDir.jobthinking">${attrDir.jobthinking}</prop>
				<prop key="attrDir.disk.jobthinking">${attrDir.disk.jobthinking}</prop>
				<!-- 简报 -->
				<prop key="attrDir.jobthinking">${attrDir.brief}</prop>
				<prop key="attrDir.disk.jobthinking">${attrDir.disk.brief}</prop>
				<!-- 项目审批 -->
				<prop key="attrDir.jobthinking">${attrDir.auditproject}</prop>
				<prop key="attrDir.disk.jobthinking">${attrDir.disk.auditproject}</prop>
			</props>
		</property>
	</bean>
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics