我有兴趣注入(inject)一个 bean 引用,该引用是根据同一 bean 上的另一个属性解析的:
@Autowired
@Qualifier("#{'prefix' + actualQualifier}")
private OtherBean otherBean
private String actualQualifier;
这将确保“actualQualifier”和“otherBean”之间的关系正确。
配置了许多 OtherBean
类型的 Bean。
我可以确保“actualQualifier”在 Autowiring /注入(inject)开始之前设置了值。
我无法找到任何方法来引用当前正在 Autowiring 的同一个 bean 上的另一个属性值(在 JavaBean 意义上)。
最佳答案
据我所知,这是行不通的。 SpEL 无法访问封闭类的变量。无论如何,@Qualifier 似乎不处理 SpEL 表达式。
我做了一些测试,但从未找到如何使用 SpEL 表达式作为 @Qualifier
值。 This page来自 Spring 论坛(以及来自 Spring 的错误消息)让我认为实际上 @Qualifier
只接受一个 String 并且不会尝试计算 SpEL 表达式。
我的结论是,这样会带你走进死胡同。
正如其他 answer 中所建议的那样,我认为你最好使用选择器 bean 并在 init 方法中设置 otherBean
:
@Bean(initMethod="init")
class MyBean {
...
@Autowired
private BeanSelector beanSelector;
private OtherBean otherBean
private String actualQualifier;
public void init() {
otherBean = beanSelector(actualQualifier);
}
...
}
并将有关 otherBean
选择的所有情报放入 beanSelector
中。
关于spring - @Qualifier 中的 SpEL 引用同一个 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29772418/