@Inject实例,在类类型上使用自定义quailfier注释

时间:2017-02-02 09:20:33

标签: java cdi

让我们说

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保留

进行注释

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您的问题,但我希望这会澄清它。我想你们正在把几件事情混在一起。

1)制片人

这些是有效地被视为bean 的方法/字段!这意味着在生产者之上,你必须定义它将创建什么样的bean。归结为限定符范围构造型,......无论您需要/想要什么。这也允许您拥有多个生成器,这些生成器只会与创建bean的限定符不同。 所以是的,你需要在每个制作人身上重复它,因为它可能会有很大的不同。

2)你的课程

你自己是bean(在这种情况下是依赖范围),你可以指定它们上的所有CDI内容 - 范围,限定符等。这将传播到bean内的生产者。如果您考虑一下,那就意味着如果您的类应用于应用程序范围,那么它生成的任何内容也将是应用程序作用域,情况并非如此。

您的混淆源也可能是拦截器/装饰器(或者更确切地说是它们的绑定),它们既可以放在bean方法上(对给定方法启用拦截),也可以放在整个类之上(为 all启用拦截方法)。