この例に関係のないいくつかの条件に応じて、さまざまなタイプのオブジェクトを作成するCDIプロデューサーメソッドがあります。
public class TestProducer {
@Produces @TestQualifier
public Object create(InjectionPoint ip) {
if(something) {
return "a String";
} else {
return Integer.valueOf(42);
}
}
しかし、このプロデューサーを使用すると、次の状況で常にエラーが発生します。
@Named("test")
public class TestComponent {
...
@Inject public void setA(@TestQualifier String stringValue) {
...
@Inject public void setB(@TestQualifier Integer integerValue) {
これは、プロデューサーのcreateメソッドがメソッドシグネチャに期待されるタイプを持っている場合にのみ機能します。
public class TestProducer {
@Produces @SpringBean
public String create(InjectionPoint ip) {
これで文字列が正しく挿入されましたが、プロデューサーメソッドから整数を生成する方法もありません。しかし、プロデューサー自体は完全にジェネリックである必要があるため、これはまさに私が避けたいことです。
私は何か間違ったことをしているのですか、それとも私が望む行動を達成する方法がありませんか?