SpEL in @Qualifier refer to same bean

冷暖自知 提交于 2019-12-09 03:45:08

问题


I am interested to inject a bean reference, which is resolved based on another property on the same bean:

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

private String actualQualifier;

This would ensure that the relationship between "actualQualifier" and "otherBean" is correct.

There is a number of beans configured of the type OtherBean.

I can make sure that "actualQualifier" has a value set before autowiring/injection begins.

I am unable to find any way to reference another property value (in the JavaBean sense) on the same bean that is currently being autowired.


回答1:


AFAIK, this will not work. SpEL has no access to variables of the enclosing class. And anyway, it looks like @Qualifier does not process SpEL expressions.

I did some tests and never found how to use a SpEL expression as a @Qualifier value. This page from Spring forums (and the error messages from Spring) let me think that in fact @Qualifier only takes a String and does not try to evaluate a SpEL expression.

My conclusion is that way will lead you in a dead end.

As suggested in this other answer, I think you'd better use a selector bean and set otherBean in an init method :

@Bean(initMethod="init")
class MyBean {
...
    @Autowired
    private BeanSelector beanSelector;
    private OtherBean otherBean
    private String actualQualifier;

    public void init() {
        otherBean = beanSelector(actualQualifier);
    }
...
}

and put all intelligence about the choice of otherBean in beanSelector.



来源:https://stackoverflow.com/questions/29772418/spel-in-qualifier-refer-to-same-bean

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!