spring - @Qualifier 中的 SpEL 引用同一个 bean

标签 spring spring-el

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

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

private String actualQualifier;

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

配置了许多 OtherBean 类型的 Bean。

我可以确保“actualQualifier”在 Autowiring /注入(inject)开始之前设置了值。

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

最佳答案

据我所知,这是行不通的。 SpEL 无法访问封闭类的变量。无论如何,@Qualifier 似乎不处理 SpEL 表达式。

我做了一些测试,但从未找到如何使用 SpEL 表达式作为 @Qualifier 值。 This page来自 Spring 论坛(以及来自 Spring 的错误消息)让我认为实际上 @Qualifier 只接受一个 String 并且不会尝试计算 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 中。

关于spring - @Qualifier 中的 SpEL 引用同一个 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29772418/

相关文章:

spring - 除了使用抑制注释之外,如何删除 Spring CrudRepository 未经检查的转换

java - 下面的 SpEL 表达式到底做什么?

java - Spring 表达式语言 (SpEL) : check empty string?

java - AES 仅共享 key (无盐或 IV)

java - SpEL 中的#root 和#this

java - 如何使用 SpEL 来评估子对象可能为空的子对象属性

java - 如何使用 Spring 表达式语言(或您知道的其他表达式语言)为定义为变量的一些对象列表赋值

java - JPA 事件监听器不工作

java - Spring Boot 表单模型

java - Spring AOP : Passing parameter in aspect method