gpt4 book ai didi

java - 如何获取当前 bean 名称/id 以在 bean 初始化中使用它来构建占位符名称

转载 作者:行者123 更新时间:2023-12-02 08:37:25 26 4
gpt4 key购买 nike

Spring框架专家您好!

我需要使用占位符来配置 10 多个类似的 bean。它们之间的唯一区别是唯一的占位符键(${bean1.key}${bean2.key} 等)。如果我直接这样做,我应该复制 bean 定义 10 次以上,并且只更改占位符的第一部分。所以我在想如何避免这种重复。

我想动态生成占位符字符串。作为动态部分,我想使用当前的 bean ID (或者它的字段值)。应该是这样的。

<!-- Template -->
<bean id="mainProfile" abstract="true" class="com.company.SomeClass">
<property name="role" value="${${this.beanName}.role:NA}">
<!-- other properties initialized in same way -->
</bean>
<!-- Instances -->
<bean id="profile1" parent="mainProfile"/>
<bean id="profile2" parent="mainProfile"/>
<bean id="profile3" parent="mainProfile"/>

因此,可以通过将下一行添加到 app.properties 来初始化所有 bean 的属性 role:

profile1.role=admin
profile2.role=guest
profile3.role=editor

我尝试了以下方法:

  1. BeanNameAware + SpEL

不幸的是,在 bean 初始化之前,bean namenull。我相信只有当 Spring 可以开箱即用地提供 bean 名称并且它具有预定义的占位符时,这种方法才可能有效。我对吗? Spring有这样的系统变量吗?

  • Factory 用于动态构造占位符名称。
  • 对我来说,它可以用于生成值,但不能用于生成占位符名称。

    如果有任何建议,我将不胜感激!

    最佳答案

    为什么不这样做:

    <!-- Template -->
    <bean id="mainProfile" abstract="true" class="com.company.SomeClass">
    <!-- other properties initialized in same way -->
    </bean>

    <!-- Instances -->
    <bean id="profile1" parent="mainProfile">
    <property name="role" value="${profile1.role}">
    </bean>
    <bean id="profile2" parent="mainProfile">
    <property name="role" value="${profile.role}">
    </bean>
    <bean id="profile3" parent="mainProfile">
    <property name="role" value="${profile3.role}">
    </bean>

    关于java - 如何获取当前 bean 名称/id 以在 bean 初始化中使用它来构建占位符名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28275829/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com