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