gpt4 book ai didi

java - SpEL : get current bean name during bean instantiation

转载 作者:行者123 更新时间:2023-12-02 11:42:46 25 4
gpt4 key购买 nike

我正在尝试使用 SpEL 获取当前正在实例化的 bean 的名称,以允许使用 @PropertySource 提供的不同属性创建同一类的多个 bean 。我希望得到类似以下的结果:

public class SampleBean {
@Value("${#{CurrentBeanName}.val}")
private String val
}

其他 bean :

public class OtherBean {

@Autowired
@Qualifier(name="BeanA")
SampleBean beanA;

@Autowired
@Qualifier(name="BeanB")
SampleBean beanB;
}

属性文件:

BeanA.val=VALUE A
BeanB.val=VALUE B

如果我添加beanName=BeanA到我的属性文件,我可以让它工作

@Value("${${beanName}.val}")

关于如何处理#{BeanName}的任何想法?如果这是不可能的,那就这样吧,但如果它有效,它将比我当前的解决方案干净得多。

编辑:

或者有什么方法可以将常量从 xml bean 定义传递到 SpEL?示例:

<bean id="BeanA" class="...">
<property name="prefix" value="BeanA"/>
</bean>

java:

public class SampleBean {
@Value("${#{prefix}.val}")
private String val
}

任何类型的属性或任何东西都可以工作

编辑2:

这在旧的基于 XML 的配置中是微不足道的

spring.xml:

<bean id="beanA" class="SampleBean">
<property name="val" value="${BeanA.val}"/>
</bean>
<bean id="beanB" class="SampleBean">
<property name="val" value="${BeanB.val}"/>
</bean>

SampleBean.java:

public class SampleBean {

private String val;

public void setVal (String val) {
this.val = val;
}
}

但是当切换到新的 @Value 时注释来摆脱所有 setter ,似乎不支持具有 diff 属性的非单例(即无法动态过滤 @Value 关于 bean 创建的参数)

最佳答案

没有;无法引用当前 bean。

编辑

为了解决您在下面的评论,Java 配置相当于

<bean id="BeanA" class="com.my.Foo">
<property name="prefix" value="BeanA"/>
</bean>

@Bean
public Foo BeanA() {
Foo a = new Foo();
a.setPrefix("BeanA");
}

尽管按照惯例,您可能会将其命名为 beanA

关于java - SpEL : get current bean name during bean instantiation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431658/

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