我的应用程序中有一个自定义限定词,可以像这样使用:
@Person(name = "bob")
public class Bob implements IPerson { ... }
name
限定词的Person
值绑定的地方。 (未用@Nonbinding
注释)
我的应用程序的一部分需要知道所有Person
bean,而我的应用程序的另一部分需要访问特定的Person
要访问特定的Person
,我可以使用:
@Inject @Person(name = "bob")
IPerson bob;
但是我如何获得所有的Person豆?我不能使用
@Inject @Person(name = "")
Instance<IPersion> people;
因为name
具有约束力。如果我将name
声明为@Nonbinding
,则上面的代码有效,但我不再能够通过其名称注入特定的Person。
我目前使用以下方法来获取所有Person
豆:
@Inject @Any
private Instance<IPerson> people;
...
for (IPerson person : people) {
if (hasPersonAnnotaion(person)) {...}
}
而hasPersonAnnotaion()
以编程方式检查人员类中的@Person
批注。有更好的方法吗?
答案 0 :(得分:0)
在代码的当前状态下,@Any
看起来是最好的选择。
显然,您需要执行过滤。
尽管知道您的代码将需要具有给定限定符的所有实例,并且如果过滤是昂贵的(很多没有@Person
限定符的实例?),您可能想要添加其他没有绑定的限定符每个IPerson
上的值-类似@IsPerson
。
然后您可以@Inject @IsPerson Instance<IPerson> people
,不需要过滤。
请注意,在现有的注射点方面,附加的限定词不会让您头痛(例如@Inject @Person(name = "bob") IPerson bob;
仍然有效)。