【发布时间】:2012-06-10 17:17:05
【问题描述】:
我的部分问题是使用正确的词汇,所以我提前为这可能是一个简单的术语问题道歉。
假设我有一个Person 接口和一个实现该接口的PersonBean 类。
假设我在某处有一个生产者方法(注释为@Produces),它返回一个Person。它在内部返回一个新的PersonBean,但它既不存在也不存在。
最后,假设我在某个地方有另一个 CDI bean,其注入点定义如下:
@Inject
private Person person;
假设我有我所有的 beans.xml 文件等,并且已经引导 Weld 或其他符合 CDI-1.0 的环境,因为这一切都代表我会得到一个模棱两可的定义错误。这是有道理的:Weld 会发现我的 PersonBean 作为注入候选者(它可以只调用构造函数),并且会发现我的生产者方法的输出作为注入候选者。
我想做的是以某种方式强制此应用程序中 Person 实例的生成始终通过生产者方法。
我知道我可以在某处发明一些限定符并让生产者方法生成由该限定符限定的Person 实例。如果我这样做,并更改我的注入点以包含限定符,那么显然这些合格的注射剂只有一个来源(即我的生产者方法),所以 瞧,问题解决了。
但假设我不想发明一些虚假的限定词。 (我并不是说是这种情况;只是想更深入地理解这些问题。)我有什么选择?我有吗?我想我可以将@Typed(Object.class) 放在PersonBean 上以使其不会被CDI 视为Person ....
欢迎提出任何想法,包括指向文档的指针,或更好的理解方式。谢谢。
【问题讨论】: