gpt4 book ai didi

java - Java中的CDI方法注入(inject)和bean继承

转载 作者:行者123 更新时间:2023-12-02 12:18:59 28 4
gpt4 key购买 nike

我想做的 - 我有一个 child 和家长类(class)。 child 有 SimpleFoo, parent 需要 Advaced foo。所以,

@Dependent
public class SimpleFoo {
}

@Dependent
public class AdvancedFoo extends SimpleFoo {
}

@Dependent
public class Child {

private SimpleFoo foo;

@Inject
protected void setFoo(SimpleFoo foo) {
this.foo = foo;
}
}

@Dependent
public class Parent extends Child {

@Inject
@Override
protected void setFoo(SimpleFoo foo) { //How to inject here AdvancedFoo
super.setFoo(foo);
}
}

我知道我可以通过构造函数注入(inject)来做到这一点,但我需要方法注入(inject)。怎么做?是否可以不使用名称(例如 MyBean1)而仅使用类(AdvancedFoo)来完成?

最佳答案

使用限定符 - 您现在有两个 Bean,它们都满足您对类型的要求;您需要对其进行限制,并且针对此类情况进行了限定符。

这里是如何做到这一点,首先是限定符:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })
public @interface MyQualifier {
}

现在,让您的 AdvancedFoo bean 使用该限定符:

@Dependent
@MyQualifier
public class AdvancedFoo extends SimpleFoo {
...
}

最后,在 init 方法中,注入(inject) SimpleFoo 类型的 bean 并使用限定符 @MyQualifier:

@MyQualifier
public class Parent extends Child {

@Inject
protected void setFoo(@MyQualifier SimpleFoo foo) {
this.foo = foo;
}
}

关于java - Java中的CDI方法注入(inject)和bean继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45938012/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com