Is a bean alias of a class name possible in Spring?

I have a string property that looks like the following example:

<property name="mappingData">
  <list>                
    <bean class="com.company.product.longNamingStandard.migration.extractor.FieldMapping">
      <property name="elementName" value="entitlement.user"/>
      <property name="mapping" value="DocUsers"/>
    </bean>
    <bean class="com.company.product.longNamingStandard.migration.extractor.FieldMapping">
      <property name="elementName" value="entitlement.contributor"/>
      <property name="mapping" value="DocContributors"/>
    </bean>
  </list>
</property>  

Duration of reading the name of the class (s), and also creates overhead for refactoring.

Is it possible to use a class name alias and use a short name to declare beans? Or is there an alternative best practice that I miss?

+3
source share
6 answers

You may be a little late, but hopefully useful for others:

You can use parent beans to accomplish this. First declare the parent bean as a template:

<bean id="FieldMapping" class="com.company.product.longNamingStandard.migration.extractor.FieldMapping"/>

Then use it elsewhere using the parent attribute.

<property name="mappingData">
  <list>                
    <bean parent="FieldMapping">
      <property name="elementName" value="entitlement.user"/>
      <property name="mapping" value="DocUsers"/>
    </bean>
    <bean parent="FieldMapping">
      <property name="elementName" value="entitlement.contributor"/>
      <property name="mapping" value="DocContributors"/>
    </bean>
  </list>
</property>

, beans.

+2

<bean/> name id, beans .

id bean.

:

<bean id="fooBean" class="com.example.foo"/>
<bean id="barBean" class="com.example.bar"/>

<list>
   <ref>fooBean</ref>
   <ref>barBean</ref>
</list>
+1

, FieldMapping s. , .

Spring 3 Spring ( FieldMapping ):

<util:map id = "m">
    <entry name = "entitlement.user" value = "DocUsers" />
    <entry name = "entitlement.contributor" value = "DocContributors" />
</util:map>
...
<property name = "mappingData" 
    value = "#{m.![new com.company.product.longNamingStandard.migration.extractor.FieldMapping(key, value)]}" />

, FactoryBean, (, map, ) FieldMapping s:

<property name = "mappingData">
    <bean class = "FieldMappingListFactoryBean">
        <property name = "mappings">
            <map>
                <entry name = "entitlement.user" value = "DocUsers" />
                <entry name = "entitlement.contributor" value = "DocContributors" />
            </map>
        </property>
    </bean>
</property>

, DSL, .

+1

, "import com.Foo;" java-. , , - PropertyPlaceholderConfigurer . , , spring, "class_FieldMapping":

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <description>Define properties equivalent to "import foo;" in java source</description>
    <property name="properties">
        <props>
            <prop key="class_FieldMapping">com.company.product.longNamingStandard.migration.extractor.FieldMapping</prop>
        </props>
    </property>
</bean>

beans:

<property name="mappingData">
  <list>                
    <bean class="${class_FieldMapping}">
      ...
    </bean>
    <bean class="${class_FieldMapping}">
      ...
    </bean>
  </list>
</property>

, , , :

<util:constant static-field="${class_FieldMapping}.MYSTATICVAR" />
+1

beans beans , ?

0

PropertyPlaceholderConfigurer, . , , .

0

Source: https://habr.com/ru/post/1770200/


All Articles