首页 > 解决方案 > 获取所有具有绑定值的限定符的bean

问题描述

我的应用程序中有一个自定义限定符,可以像这样使用:

@Person(name = "bob")
public class Bob implements IPerson { ... }

其中限定符的name值具有约束力。Person(未用 注释@Nonbinding

我的应用程序的一部分需要知道所有Personbean,而我的应用程序的另一部分需要访问特定的Person

要访问特定的Person我可以使用:

@Inject @Person(name = "bob")
IPerson bob;

但是我怎样才能得到所有的人豆呢?我无法使用

@Inject @Person(name = "")
Instance<IPersion> people;

因为name具有约束力。如果我声明name上述@Nonbinding代码有效,但我不再能够通过其名称注入特定的人。

我目前使用以下方法获取所有Personbean:

@Inject @Any
private Instance<IPerson> people;
...
for (IPerson person : people) {
    if (hasPersonAnnotaion(person)) {...}
}

hasPersonAnnotaion()以编程方式检查persons类的@Person注释。有没有更好的办法?

标签: wildflycdiweld

解决方案


在您的代码的当前状态下,@Any看起来是最好的选择。有了这个,你显然需要你执行的过滤。

尽管知道您的代码将需要具有给定限定符的所有实例,并且如果过滤很昂贵(很多没有@Person限定符的实例?),您可能希望添加额外的限定符而没有绑定值,IPerson例如@IsPerson. 然后你可以@Inject @IsPerson Instance<IPerson> people并且不需要过滤。

请注意,就现有注入点而言,附加限定符不会让您头疼(例如@Inject @Person(name = "bob") IPerson bob;,仍然有效)。


推荐阅读