浏览 3838 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-12-02
最后修改:2012-12-02
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。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-12-02
引用 PropertyResolver 的主要目的就是查找配置(.properties,环境变量)
PropertySource 则用途更全面。 奇怪的是PropertySource 被设计为abstract class,而PropertyResolver 被设计成interface。 我认为: 1、PropertyResolver:它是面向客户的,即设计给第三方(陌生人)使用的,所以设计成接口肯定是合理的; 2、PropertySource:表示一个name/value属性对集,代表了值,一般作为PropertyResolver实现的一个delegate使用,所以它一般不直接面向客户使用,我认为没必要设计成接口。即使设计成接口,它也需要设计一个抽象类来复用一些共性代码,因为是朋友关系,所以直接抽象类即可吧。 请猛拍。 |
|
返回顶楼 | |
发表时间:2012-12-03
作者的头像很有爱啊
|
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |