我有兴趣注入一个bean引用,它基于同一个bean上的另一个属性解析:
@Autowired
@Qualifier("#{'prefix' + actualQualifier}")
private OtherBean otherBean
private String actualQualifier;
这将确保" actualQualifier"之间的关系。和" otherBean"是对的。
有许多bean配置了OtherBean
类型。
我可以确保" actualQualifier"在自动装配/注射开始之前设置一个值。
我无法找到任何方法来引用当前正在自动装配的同一个bean上的另一个属性值(在JavaBean意义上)。
答案 0 :(得分:2)
AFAIK,这不起作用。 SpEL无法访问封闭类的变量。无论如何,看起来@Qualifier
不处理SpEL表达式。
我做了一些测试,但从未发现如何将SpEL表达式用作@Qualifier
值。来自Spring论坛的This page(以及来自Spring的错误消息)让我认为事实上@Qualifier
只接受一个字符串而不会尝试评估一个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
选项的所有情报。