SS3EX中读取属性文件的比较

突然想写篇文章了,在SS3EX中如何读取属性文件,需求是:页面和类中的方法都能访问的全局变量,满足3个因数:1是速度快,2是消耗小,3是读取方便:
1、利用spring框架的内部类PropertyPlaceholderConfigurer
<!-- 定义受环境影响易变的变量 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<!-- 标准配置 -->
<value>classpath*:/application.properties</value>
<!-- 本地开发环境配置 -->
<value>classpath*:/application.local.properties</value>
<!-- 服务器生产环境配置 -->
<!-- <value>file:/var/myapp/application.server.properties</value> -->
</list>
</property>
</bean>

Srping2.5中新加入了‘context’命名空间,这个命名空间让我们能够得到更为简洁的方式来实现属性占位符(property placeholder)的配置:
<context:property-placeholder location="classpath:jdbc.properties"/>
配置文件中的其他BEAN
<!-- 数据源配置,使用应用内的DBCP数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
……

该方法是在项目启动时,就自动由spring初始化了,而且是Spring Singleton范围,速度是在内存中,快,消耗是一次性的,小,读取的时候分为2种情况,类中读取和页面读取,

页面读取要引入定义的BEAN,故在XML文件中还要专门写个BEAN,注入所有的属性,在调用的类中引用这个BEAN。页面的读取必须要经过ACTION的出来才能读取,或者放入

APPLICATION中,或者在action中生成要读取变量的get和set方法,看来读取还是很麻烦的;
2、利用spring框架的内部类PropertiesFactoryBean
<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
<property name="location" value="classpath:resources/freemarker.properties"/>
</bean>

<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!-- 直接将Freemarker.propertyies写在单独的.properties注入进来 -->
<property name="freemarkerSettings" ref="freemarkerConfiguration"/>
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<!-- 全局变量部分 -->
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
<entry key="webRoot" value="${webRoot}" />
<entry key="cssRoot" value="${cssRoot}" />
<entry key="jsRoot" value="${jsRoot}" />
</map>
</property>
<property name="defaultEncoding" value="utf-8" />
</bean>

该方法的速度和消耗及类中读取同方法一,页面读取很简单:${webRoot},所以该方法优于第一种。
3、直接写个普通类,例如:Config.java
public class WebConfig {
private final static ResourceBundle rb = ResourceBundle.getBundle("webconfig");
public static String ALIPAY_KEY=rb.getString("ALIPAY_KEY");
……

参数webconfig代表的是文件名为webconfig属性文件
该方法在action中调用ALIPAY_KEY变量时,直接Config.ALIPAY_KEY,由于属性是静态的,所以第一次访问后就进入了内存,速度快,全局的,消耗只一次,小,页面访问时同方法一。
4、通过Spring的工具类在程序中读取属性文件,假设jdbc.properties 是位于类路径下的文件
        Properties props = PropertiesLoaderUtils.loadAllProperties("jdbc.properties");
System.out.println(props.getProperty("jdbc.driverClassName"));
通过Struts2自带的标签,去读后台的静态文件(参照博客的另一篇文章[url]:http://san586.iteye.com/blog/468582[/url]),或者用<spring:message>在页面上直接读取。综上所述:同等的条件下,
方法    速度  消耗   类中读取  页面读取
方法一 √ √
方法二 √ √ 方便
方法三 √ √ 方便
方法四 √ √ 方便 方便
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值