@Qualifier中的SpEL引用相同的bean

时间:2015-04-21 12:36:47

标签: spring spring-el

我有兴趣注入一个bean引用,它基于同一个bean上的另一个属性解析:

@Autowired
@Qualifier("#{'prefix' + actualQualifier}")
private OtherBean otherBean

private String actualQualifier;

这将确保" actualQualifier"之间的关系。和" otherBean"是对的。

有许多bean配置了OtherBean类型。

我可以确保" actualQualifier"在自动装配/注射开始之前设置一个值。

我无法找到任何方法来引用当前正在自动装配的同一个bean上的另一个属性值(在JavaBean意义上)。

1 个答案:

答案 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选项的所有情报。