`
ncs123
  • 浏览: 102750 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

String之PropertyPlaceholderConfigurery源码解析

阅读更多
1. PropertyPlaceholderConfigurery使用

注解方式:
<context:property-placeholder location="classpath*:disconf.properties" 
 ignore-unresolvable="true"
	ignore-resource-not-found="true" order = "2" />


bean方式:
<bean id="disconfStaticConfigPropertyConfigurer"
		  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<!--找不到文件时不报错-->
		<property name="ignoreResourceNotFound" value="true"/>
		<!--是否应该忽略不可解析的占位符-->
		<property name="ignoreUnresolvablePlaceholders" value="true"/>
		<!--order越小,越先被执行-->
		<property name="order" value="1"/>
		<!--本地配置文件-->
		<property name="location" value="classpath*:disconf.properties" />
		<property name="propertiesArray">
			<list>
				<!--Properties对象引用-->
				<ref bean="disconfPropertiesReader"/>
			</list>
		</property>
	</bean>


2. PropertyPlaceholderConfigurery原理
PropertyPlaceholderConfigurery继承关系


PropertyResourceConfigurer实现了BeanFactoryPostProcessor接口,在Spring读取了所有bean的配置元数据,但是还没有实例化的时候,完成读取配置文件,替换占位符。

    1.mergeProperties
       1.1 从本地配置读取
       1.2 合并传递进来的properties

    2.convertProperties
        2.1替换properties中value中的占位符

    3.processProperties
        3.1 替换spring BeanDefinition中ParentName,BeanClassName,
             FactoryBeanName,
             FactoryMethodName,
            Scope,
            PropertyValues,
            ConstructorArgumentValues中的占位符
        3.2 替换spring Aliases别名中的占位符
        3.3 addEmbeddedValueResolver添加到嵌入式值解析器列表中

3. 动态读取PropertyPlaceholderConfigurery
public class PropertyTest implements EmbeddedValueResolverAware {

    private String tempFilePath;

    @Override
    public void setEmbeddedValueResolver(StringValueResolver resolver) {
        //默认解析${}中的参数,
        // 可以在定义PropertyPlaceholderConfigurery时设置placeholderPrefix,placeholderSuffix自定义分隔符
        tempFilePath = resolver.resolveStringValue("${temp.file.path}");
    }

}
  • 大小: 45.8 KB
  • 大小: 110.2 KB
分享到:
评论

相关推荐

    String StringBuffer和StringBuilder区别之源码解析

    "String StringBuffer和StringBuilder区别之源码解析" 在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、...

    javastring类的源码

    java jdk中string类的源码 ,了解string类的书写,定义和声明

    c++string函数源码

    c++string函数源码 无修改

    Spring源码解析.pdf

    ### Spring源码解析知识点 #### 一、Spring IoC 容器详解 ##### 1. BeanFactory —— 最基础的IoC容器 - **概念**:`BeanFactory` 是Spring框架中最基本的IoC容器,它负责管理Bean的生命周期,包括创建、配置和...

    basic_string源码

    basic_string源码详解 basic_string是C++标准库中一个非常重要的类,它提供了字符串处理的功能。在本文中,我们将深入探讨basic_string的源码,了解它的实现机制和内部数据结构。 basic_string的内部数据结构 ...

    Android AsyncTask 源码解析

    **Android AsyncTask 源码解析** AsyncTask 是 Android 平台上一个非常重要的工具类,用于在后台线程执行耗时操作,然后在 UI 线程更新结果,从而避免了因长时间运行任务而导致的 ANR(Application Not Responding...

    .NET 3.5 String.cs 源代码

    .NET 3.5 String.cs 源代码

    c++string类源码

    本篇文章将深入解析`std::string`类的一些关键知识点,特别是根据标题描述提及的拷贝构造函数、深拷贝与浅拷贝、追加函数、赋值函数以及字符串比较和重载运算符。 1. **拷贝构造函数**: 拷贝构造函数是一种特殊的...

    java中的String类常用方法解析(一)

    在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。本文将深入解析`String`类的一些常用方法,帮助开发者更好地理解和使用这个核心类。 1. **构造方法** - `String()`:创建一个空字符...

    java字符串与集合互相转换,字符串转List,Map,List转String,String转List源码

    List集合转换成String,String转List,Map转String,String转Map等 集合与字符串相互转换,可以自己扩展源码,带有注释

    功能强大的String类源码(C++)

    用C++语言实现的一个功能强大的String类,该类包含对字符串的各种灵活操作,40多个强大的API(CharAt,Length,IndexOf,Replace,Add,Insert,Remove.....), 为学习数据结构的朋友提供了很好的帮助。

    C#_string_byte数组转换解析

    本篇文章将详细解析C#中如何进行这两种数据类型的转换,并讨论转换过程中需要注意的事项。 首先,我们来看最基础的转换方法: 1. **字符串(string)转为字节数组(byte[])**: 这个过程涉及到字符编码,C#中可以...

    Java String 源码解析

    答:String 内部存储结构是char数组,源码如下: public final class String implements java.io.Serializable, Comparable, CharSequence { /** 该值用于字符存储. */ private final char value[]; 2.String源码中...

    Redis源码解析

    源码解析有助于深入理解其工作原理,提高在实际应用中的优化能力。本篇文章将聚焦Redis的源码,探讨其核心组件、数据结构以及内部运行机制。 1. **Redis的数据结构** Redis的核心数据结构包括字符串(String)、...

    C++模拟string类作业源码.zip

    C++模拟string类作业源码.zip

    Android源码解析

    ### Android源码解析知识点概述 #### 公共技术点概览 - **Java反射** - Java反射机制允许运行时检查类、接口、字段和方法的信息,并能够动态地调用方法和修改字段值。 - **应用场景**:动态加载类、实现插件化...

    hadoop NameNode 源码解析

    Hadoop NameNode 源码解析 Hadoop 的 NameNode 是 Hadoop 分布式文件系统(HDFS)的核心组件之一,负责管理文件系统的 namespace 和数据块的存储位置。在本文中,我们将深入探讨 Hadoop NameNode 的源码,了解其...

    vs2019 里 C++ 20规范的 string 类的源码注释

    vs2019 里 C++ 20规范的 string 类的源码注释

Global site tag (gtag.js) - Google Analytics