@Qualifier 中的 SpEL 引用同一个 bean

2024-05-06

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

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

private String actualQualifier;

这将确保“actualQualifier”和“otherBean”之间的关系是正确的。

配置了许多该类型的 beanOtherBean.

我可以确保“actualQualifier”在自动装配/注入开始之前设置了一个值。

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


AFAIK,这是行不通的。 SpEL 无法访问封闭类的变量。不管怎样,它看起来像@Qualifier不处理 SpEL 表达式。

我做了一些测试,但从未找到如何使用 SpEL 表达式作为@Qualifier value. 这一页 http://forum.spring.io/forum/spring-projects/container/130370-does-qualifier-work-with-properties-set-using-spring-3-profiles来自 Spring 论坛(以及来自 Spring 的错误消息)让我认为事实上@Qualifier只接受一个字符串并且不尝试计算 SpEL 表达式。

我的结论是,这条路会把你带进死胡同。

正如其他中所建议的answer https://stackoverflow.com/a/18216722/3545273,我认为你最好使用选择器 bean 并设置otherBean在 init 方法中:

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

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

并把所有关于选择的情报otherBean in beanSelector.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Qualifier 中的 SpEL 引用同一个 bean 的相关文章

随机推荐