我的部分问题是使用适当的词汇表,所以我提前道歉可能是一个简单的术语问题.
假设我有一个Person接口,以及一个PersonBean实现该接口的类.
假设我在某处(注释@Produces)有一个返回a 的生成器方法Person.在内部它返回一个新的PersonBean,但这既不在这里也不在那里.
最后,假设我有另一个CDI bean,其注入点定义如下:
@Inject
private Person person;
Run Code Online (Sandbox Code Playgroud)
假设我已经将我的所有beans.xml文件都放在适当的位置,并且已经引导了Weld或其他符合CDI-1.0标准的环境,因为这一切都将导致模糊的定义错误.这是有道理的:Weld将找到我PersonBean作为注入的候选者(它可以只调用构造函数)并且将找到我的producer方法的输出作为注入的候选者.
我想要做的是以某种方式强制Person在此应用程序中生成实例始终路由生成器方法.
我知道我可以在某处创建一些限定符,并使生成器方法生成Person由该限定符限定的实例.如果我这样做,并改变我的注射点以包括限定符,那么显然这些合格的注射剂只有一个来源(即我的生产者方法),所以瞧,问题解决了.
但是假设我不想发明一些虚假的限定词.(我不是说这是事实;只是想更深入地了解这些问题.)我有什么选择?我有吗?我想我可以把@Typed(Object.class)在PersonBean做出这等,这是不看作是一个Person由CDI ....
欢迎任何想法,包括指向文档,或更好地理解这一点.谢谢.
通过消化这里和其他地方的几个不同的答案,我采用的解决方案是在我的 bean 上使用@Typed值为 的注释Object.class。这意味着它只能被注入到如下声明的字段中:
@Inject
private Object something;
Run Code Online (Sandbox Code Playgroud)
...值得庆幸的是,这几乎不存在。:-)