Java生成通用方法_java – 通用CDI生成器方法无法按预期工作

所有CDI文档都清楚地表明CDI进行了类型安全依赖注入 – 它是CDI的崇高属性.恕我直言,你要做的就是CDI试图避免的.您希望容器将Object强制转换为每种类型,而CDI不会以这种方式工作.

注入点stringValue和integerValue只能接收一个分别在其bean types列表中包含java.lang.String和java.lang.Integer的bean. java.lang.Object不满足此标准.

我有两个建议.首先,由于您有两个或更多不同类型的注入点,因此为这些类型创建两个或更多个生成器方法:

public class TestProducer {

@Produces @TestQualifier

public String createString(InjectionPoint ip) {

if(something) {

return "a String";

} else {

// Some other value

}

}

@Produces @TestQualifier

public int createInt(InjectionPoint ip) {

if(something) {

return 42;

} else {

// Some other value

}

}

// ...

如果某些条件只是为了检查注入点的类型(我认为是这种情况),它就可以工作.

但是,如果某些条件确实使用除注入点类型之外的其他条件来决定类型,我建议自己执行“脏工作”:将返回值注入Object类型的注入点并手动执行转换:

@Named("test")

public class TestComponent {

...

@Inject public void setA(@TestQualifier Object value) {

String stringValue = (String) value;

...

@Inject public void setB(@TestQualifier Object value) {

int intValue = (Integer) value;

重点是,与其他一些DI框架不同,CDI不会对Java类型系统起作用 – 相反,它大量使用它.不要试图反对它,但使用CDI的这方面对你有利:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值