org.springframework.beans.factory.config

Class PlaceholderConfigurerSupport

  • All Implemented Interfaces:
    Aware, BeanFactoryAware, BeanNameAware, BeanFactoryPostProcessor, Ordered, PriorityOrdered
    Direct Known Subclasses:
    PropertyPlaceholderConfigurer, PropertySourcesPlaceholderConfigurer


    public abstract class PlaceholderConfigurerSupport
    extends PropertyResourceConfigurer
    implements BeanNameAware, BeanFactoryAware
    Abstract base class for property resource configurers that resolve placeholders in bean definition property values. Implementations pull values from a properties file or other property source into bean definitions.

    The default placeholder syntax follows the Ant / Log4J / JSP EL style:

    ${...}
    Example XML bean definition:
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"/>
       <property name="driverClassName" value="${driver}"/>
       <property name="url" value="jdbc:${dbname}"/>
     </bean>
     
    Example properties file:
    driver=com.mysql.jdbc.Driver
     dbname=mysql:mydb
    Annotated bean definitions may take advantage of property replacement using the @Value annotation:
    @Value("${person.age}")
    Implementations check simple property values, lists, maps, props, and bean names in bean references. Furthermore, placeholder values can also cross-reference other placeholders, like:
    rootPath=myrootdir
     subPath=${rootPath}/subdir
    In contrast to PropertyOverrideConfigurer, subclasses of this type allow filling in of explicit placeholders in bean definitions.

    If a configurer cannot resolve a placeholder, a BeanDefinitionStoreException will be thrown. If you want to check against multiple properties files, specify multiple resources via the locations property. You can also define multiple configurers, each with its own placeholder syntax. Use ignoreUnresolvablePlaceholders to intentionally suppress throwing an exception if a placeholder cannot be resolved.

    Default property values can be defined globally for each configurer instance via the properties property, or on a property-by-property basis using the default value separator which is ":" by default and customizable via setValueSeparator(String).

    Example XML property with default value:

       
     
    Since:
    3.1
    Author:
    Chris Beams, Juergen Hoeller
    See Also:
    PropertyPlaceholderConfigurer, PropertySourcesPlaceholderConfigurer
    • Field Detail

      • DEFAULT_PLACEHOLDER_PREFIX

        public static final java.lang.String DEFAULT_PLACEHOLDER_PREFIX
        Default placeholder prefix: "${".
        See Also:
        Constant Field Values
      • DEFAULT_PLACEHOLDER_SUFFIX

        public static final java.lang.String DEFAULT_PLACEHOLDER_SUFFIX
        Default placeholder suffix: "}".
        See Also:
        Constant Field Values
      • DEFAULT_VALUE_SEPARATOR

        public static final java.lang.String DEFAULT_VALUE_SEPARATOR
        Default value separator: ":".
        See Also:
        Constant Field Values
      • placeholderPrefix

        protected java.lang.String placeholderPrefix
        Defaults to "${".
      • placeholderSuffix

        protected java.lang.String placeholderSuffix
        Defaults to "}".
      • valueSeparator

        @Nullable
        protected java.lang.String valueSeparator
        Defaults to ":".
      • trimValues

        protected boolean trimValues
      • nullValue

        @Nullable
        protected java.lang.String nullValue
      • ignoreUnresolvablePlaceholders

        protected boolean ignoreUnresolvablePlaceholders
    • Constructor Detail

      • PlaceholderConfigurerSupport

        public PlaceholderConfigurerSupport()
    • Method Detail

      • setPlaceholderPrefix

        public void setPlaceholderPrefix(java.lang.String placeholderPrefix)
        Set the prefix that a placeholder string starts with. The default is "${".
      • setPlaceholderSuffix

        public void setPlaceholderSuffix(java.lang.String placeholderSuffix)
        Set the suffix that a placeholder string ends with. The default is "}".
      • setValueSeparator

        public void setValueSeparator(@Nullable
                                      java.lang.String valueSeparator)
        Specify the separating character between the placeholder variable and the associated default value, or null if no such special character should be processed as a value separator. The default is ":".
      • setTrimValues

        public void setTrimValues(boolean trimValues)
        Specify whether to trim resolved values before applying them, removing superfluous whitespace from the beginning and end.

        Default is false.

        Since:
        4.3
      • setNullValue

        public void setNullValue(java.lang.String nullValue)
        Set a value that should be treated as null when resolved as a placeholder value: e.g. "" (empty String) or "null".

        Note that this will only apply to full property values, not to parts of concatenated values.

        By default, no such null value is defined. This means that there is no way to express null as a property value unless you explicitly map a corresponding value here.

      • setIgnoreUnresolvablePlaceholders

        public void setIgnoreUnresolvablePlaceholders(boolean ignoreUnresolvablePlaceholders)
        Set whether to ignore unresolvable placeholders.

        Default is "false": An exception will be thrown if a placeholder fails to resolve. Switch this flag to "true" in order to preserve the placeholder String as-is in such a case, leaving it up to other placeholder configurers to resolve it.

      • setBeanName

        public void setBeanName(java.lang.String beanName)
        Only necessary to check that we're not parsing our own bean definition, to avoid failing on unresolvable placeholders in properties file locations. The latter case can happen with placeholders for system properties in resource locations.
        Specified by:
        setBeanName in interface BeanNameAware
        Parameters:
        beanName - the name of the bean in the factory. Note that this name is the actual bean name used in the factory, which may differ from the originally specified name: in particular for inner bean names, the actual bean name might have been made unique through appending "#..." suffixes. Use the BeanFactoryUtils.originalBeanName(String) method to extract the original bean name (without suffix), if desired.
        See Also:
        PropertiesLoaderSupport.setLocations(org.springframework.core.io.Resource...), ResourceEditor