让我们说
class TestClass1 {
@Inject @Any @BBB(PARAM1)
Instance< Product > instaces;
@Produces @BBB(PARAM1)
Product first(){...}
@Produces @BBB(PARAM1)
Product second(){...}
}
和
class TestClass2 {
@Inject @Any @BBB(PARAM2)
Instance< Product > instaces;
@Produces @BBB(PARAM2)
Product first(){...}
@Produces @BBB(PARAM2)
Product second(){...}
}
当我把@BBBs放在类上并从方法中删除时,实例是空的。它是如何工作的,我必须在每个@Produces方法上复制@BBB或者我错过了什么?
@BBB使用@Qualifier和RUNTIME保留
进行注释答案 0 :(得分:1)
我不确定我是否完全理解您的问题,但我希望这会澄清它。我想你们正在把几件事情混在一起。
1)制片人
这些是有效地被视为bean 的方法/字段!这意味着在生产者之上,你必须定义它将创建什么样的bean。归结为限定符,范围,构造型,......无论您需要/想要什么。这也允许您拥有多个生成器,这些生成器只会与创建bean的限定符不同。 所以是的,你需要在每个制作人身上重复它,因为它可能会有很大的不同。
2)你的课程
你自己是bean(在这种情况下是依赖范围),你可以指定它们上的所有CDI内容 - 范围,限定符等。这将不传播到bean内的生产者。如果您考虑一下,那就意味着如果您的类应用于应用程序范围,那么它生成的任何内容也将是应用程序作用域,情况并非如此。
您的混淆源也可能是拦截器/装饰器(或者更确切地说是它们的绑定),它们既可以放在bean方法上(对给定方法启用拦截),也可以放在整个类之上(为 all启用拦截方法)。