Spring @Qualifier中的SpEL引用同一个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

我感兴趣的是注入一个bean引用,该引用基于同一bean上的另一个属性进行解析:

@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。