@Inject 在 class 类型上带有自定义限定符注释的实例
@Inject Instance with custom quailfier annotation on class type
假设我们有
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 放在class 上并从方法实例中删除时,实例为空。它是如何工作的,我必须在每个@Produces 方法或我错过的东西上复制@BBB?
@BBB 使用@Qualifier 和 RUNTIME 保留注释
不确定我是否完全理解你的问题,但我希望这能澄清问题。我认为你把几样东西混在一起了。
1) 制作人
这些 methods/fields 是 有效地被认为是 beans!这意味着在生产者之上,您必须定义它将创建什么样的 bean。归结为 qualifiers、scope、stereotypes、...无论你 need/want那里。这也允许您拥有多个生产者,这些生产者仅在创建 bean 的限定符方面有所不同。 所以是的,你需要在每个制作人身上重复一遍,因为它可能会有很大的不同。
2) 你的 classes
你本身就是 beans(在这种情况下是从属范围),你可以在它们上面指定所有 CDI 内容 - 范围、限定符等。这将 不会 传播到生产者在豆子里面。如果您考虑一下,那就意味着如果您的 class 是应用程序范围的,那么它产生的任何内容也将是应用程序范围的,事实并非如此。
您的混淆来源也可能是 interceptor/decorator(或者更确切地说是它们的绑定),它可以放在 bean 方法上(为给定方法启用拦截)或放在整个 class 之上(启用所有 方法的拦截)。
假设我们有
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 放在class 上并从方法实例中删除时,实例为空。它是如何工作的,我必须在每个@Produces 方法或我错过的东西上复制@BBB?
@BBB 使用@Qualifier 和 RUNTIME 保留注释
不确定我是否完全理解你的问题,但我希望这能澄清问题。我认为你把几样东西混在一起了。
1) 制作人
这些 methods/fields 是 有效地被认为是 beans!这意味着在生产者之上,您必须定义它将创建什么样的 bean。归结为 qualifiers、scope、stereotypes、...无论你 need/want那里。这也允许您拥有多个生产者,这些生产者仅在创建 bean 的限定符方面有所不同。 所以是的,你需要在每个制作人身上重复一遍,因为它可能会有很大的不同。
2) 你的 classes
你本身就是 beans(在这种情况下是从属范围),你可以在它们上面指定所有 CDI 内容 - 范围、限定符等。这将 不会 传播到生产者在豆子里面。如果您考虑一下,那就意味着如果您的 class 是应用程序范围的,那么它产生的任何内容也将是应用程序范围的,事实并非如此。
您的混淆来源也可能是 interceptor/decorator(或者更确切地说是它们的绑定),它可以放在 bean 方法上(为给定方法启用拦截)或放在整个 class 之上(启用所有 方法的拦截)。