wildfly - 获取所有具有绑定值的限定符的bean
问题描述
我的应用程序中有一个自定义限定符,可以像这样使用:
@Person(name = "bob")
public class Bob implements IPerson { ... }
其中限定符的name
值具有约束力。Person
(未用 注释@Nonbinding
)
我的应用程序的一部分需要知道所有Person
bean,而我的应用程序的另一部分需要访问特定的Person
要访问特定的Person
我可以使用:
@Inject @Person(name = "bob")
IPerson bob;
但是我怎样才能得到所有的人豆呢?我无法使用
@Inject @Person(name = "")
Instance<IPersion> people;
因为name
具有约束力。如果我声明name
上述@Nonbinding
代码有效,但我不再能够通过其名称注入特定的人。
我目前使用以下方法获取所有Person
bean:
@Inject @Any
private Instance<IPerson> people;
...
for (IPerson person : people) {
if (hasPersonAnnotaion(person)) {...}
}
而hasPersonAnnotaion()
以编程方式检查persons类的@Person
注释。有没有更好的办法?
解决方案
在您的代码的当前状态下,@Any
看起来是最好的选择。有了这个,你显然需要你执行的过滤。
尽管知道您的代码将需要具有给定限定符的所有实例,并且如果过滤很昂贵(很多没有@Person
限定符的实例?),您可能希望添加额外的限定符而没有绑定值,IPerson
例如@IsPerson
. 然后你可以@Inject @IsPerson Instance<IPerson> people
并且不需要过滤。
请注意,就现有注入点而言,附加限定符不会让您头疼(例如@Inject @Person(name = "bob") IPerson bob;
,仍然有效)。
推荐阅读
- python - 切片字符串
- python - Python:用于 NumPy 数组的 struct.pack 和 struct.unpack
- android - Android Studio 到 React Native
- php - 如何从发送给 WooCommerce 客户的电子邮件中删除发货国家/地区?
- python - 在python中绘制特征值
- wordpress - 如何在循环之前更改查询结果:wordpress
- leaflet - 如何在传单面板组中一次只激活一项?
- exception - 如何调试无法解释的异常 VS 2019 Windows Xamarin Forms?
- angularjs - 使用时刻 js 的日期验证不起作用
- css - 如果输入字段高于其余输入