CDI方法注入和豆遗传Java



我想做的事情 - 我有一个孩子和父班。孩子有SimpleFoo,父母需要Adved 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);
    }
}

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

使用限定符 - 您现在有两个bean都满足您对类型的要求;您需要限制这一点,并在此类情况下制作预选赛。

这是如何做的,首先是预选赛:

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

现在,使您的AdvancedFoo使用该预选赛:

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

最后,在Init方法中,注入SimpleFoo类型的豆子,并使用预选赛@MyQualifier

@MyQualifier
public class Parent extends Child {
    @Inject
    protected void setFoo(@MyQualifier SimpleFoo foo) {
        this.foo = foo;
    }
}

最新更新