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