仅在 beans.xml 中定义附加占位符/属性

Avr*_*gon 6 java spring spring-boot

我有一个字符串列表,我想在 beans.xml 中定义它。

<util:list id="myFractions" value-type="java.lang.String">
    <value>#{ T(com.myapp.longname.verylong.WelcomeController).RED_FRACTION }</value>
    <value>#{ T(com.myapp.longname.verylong.WelcomeController).BLUE_FRACTION }</value>
    <value>#{ T(${my.prefix}).GREEN_FRACTION }</value>
</util:list>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但每次我都需要编写完整的限定常量名称com.myapp.longname.verylong.WelcomeController。我只想写一次。我发现的一个解决方案是将其替换为类似的属性my.prefix,这样我就可以只写我的短前缀而不是真正的完整路径。但随后我需要用只需要一次的属性来污染全局“命名空间”。我想仅为该列表或至少仅为该 beans.xml 文件定义一个占位符。我已经尝试直接在 beans.xml 中定义一个属性并且PropertyPlaceholderConfigurer它有效,但是我所有的初始属性都不再可用。

那么如何避免com.myapp.longname.verylong.WelcomeController每次都在列表中作为前缀写入并且只定义一次呢?理想情况下是这样的

<util:list id="myFractions" value-type="java.lang.String">
    <define-local-placeholder name="my.prefix" value="com.myapp.longname.verylong.WelcomeController" />
    <value>#{ T(${my.prefix}).RED_FRACTION }</value>
    <value>#{ T(${my.prefix}).BLUE_FRACTION }</value>
    <value>#{ T(${my.prefix}).GREEN_FRACTION }</value>
</util:list>
Run Code Online (Sandbox Code Playgroud)

Aru*_*ala 1

请尝试一下这个

<context:property-placeholder properties-ref="shorthandHelperConstants"/>

<util:properties id="shorthandHelperConstants">
    <prop key="my.prefix">com.myapp.longname.verylong.WelcomeController</prop>
</util:properties>

<util:list id="myFractions" value-type="java.lang.String">
    <value>#{ T(${shorthandHelperConstants['my.prefix']}).RED_FRACTION }</value>
    <value>#{ T(${shorthandHelperConstants['my.prefix']}).BLUE_FRACTION }</value>
    <value>#{ T(${shorthandHelperConstants['my.prefix']}).GREEN_FRACTION }</value>
</util:list>
Run Code Online (Sandbox Code Playgroud)