Spring @Qualifier中的SpEL引用同一个bean
我感兴趣的是注入一个bean引用,该引用基于同一bean上的另一个属性进行解析:Spring @Qualifier中的SpEL引用同一个bean,spring,spring-el,Spring,Spring El,我感兴趣的是注入一个bean引用,该引用基于同一bean上的另一个属性进行解析: @Autowired @Qualifier("#{'prefix' + actualQualifier}") private OtherBean otherBean private String actualQualifier; 这将确保“actualQualifier”和“otherBean”之间的关系是正确的 有许多bean配置为OtherBean类型 在自动布线/注入开始之前,我可以确保“actualQu
@Autowired
@Qualifier("#{'prefix' + actualQualifier}")
private OtherBean otherBean
private String actualQualifier;
这将确保“actualQualifier”和“otherBean”之间的关系是正确的
有许多bean配置为OtherBean
类型
在自动布线/注入开始之前,我可以确保“actualQualifier”设置了一个值
我找不到任何方法在当前正在自动连接的同一个bean上引用另一个属性值(JavaBean意义上)。好的,这将不起作用。SpEL无法访问封闭类的变量。无论如何,看起来
@Qualifier
不处理SpEL表达式
我做了一些测试,但从未发现如何将SpEL表达式用作限定符。从Spring论坛(以及Spring的错误消息)中,让我认为实际上@Qualifier
只接受一个字符串,而不尝试计算SpEL表达式
我的结论是这条路会把你引向死胡同
正如本文中所建议的,我认为最好使用选择器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
。然后我需要nx限定名bean,而不需要知道使用哪个。要点是有N个不同的bean“对”需要以某种方式找到彼此。@Dennistrysøe:甚至比这更糟:-(。但请参阅我的编辑以获得另一种方法。您可以制作自己的BeanPostProcessor
(或MergedBeanDefinitionPostProcessor
)来注入这些bean。