外在化属性配置方式的一种尝试

4 篇文章 0 订阅

一般来说Spring配置文件<context:property-placeholder>标签提供了优雅的外在化属性配置方式,通过属性文件可以是程序需要的某些参数可以配置,而无需改动程序

但是当多个属性文件一起加载时,<context:property-placeholder>标签有一个复杂的加载顺序综合作用,如果又无法很有效的控制属性文件中属性名的规范,极易出现重名的属性,导致得不到理想的属性值

而且<context:property-placeholder>标签采用依赖注入的方式,需要Bean中存在该属性对应的类属性,并提供setter方法,从而在bean文件中进行注入

public class SpringBean {
    private String userId;
    private String userName;

    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }

}
<bean id="springBean" class="com.dragon.spring.SpringBean">
    <property name="userId"><value>${userId}</value></property>
    <property name="userName"><value>${userName}</value></property>
</bean>

但是有时我们在某个Handle或者Service服务类中,某个方法中需要该属性的值,类似的类有很多,每个类都将需要定义类属性、getter、settter方法,并进行注入,此时不妨尝试通过单例模式来提供一个提供属性值的单例类,该类在实例化时将加载指定的属性文件,可以加载多个属性文件,也可以加载指定属性文件

public class DefaultInfo {
    private static DefaultInfo defaultInfo = null;

    private Properties defaultProperties = new Properties();

    private DefaultInfo() throws IOException{
        this("DefaultInfo.properties");
    }

    private DefaultInfo(String path) throws IOException{
        defaultProperties.load(this.getClass().getClassLoader().getResourceAsStream(path));
    }

    public static synchronized DefaultInfo getInstance() throws IOException{
        if (defaultInfo == null) {
            defaultInfo = new DefaultInfo("DefaultInfo.properties");
        }
        return defaultInfo;
    }

    public String getProperty(String key){
        return defaultProperties.getProperty(key);
    }
}

在需要的地方调用该类的静态公共方法即可

String userId = DefaultInfo.getInstance().getProperty("userId");

上述方式是本人的一种个人尝试!但是像一些非程序中需要的参数,比较数据库连接属性,数据库连接属性一般是持久层框架所需,并不需要读入到程序中,那么还是首选推荐Spring的<context:property-placeholder>标签

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值