在CDI中,有没有一种一次性的方法来获取传递限定符?
在CDI中,有没有一种方法可以调用一个方法来获取注释类型的注释,而这些注释本身是用元注释注释的
假设我有一个注释@Fred
,可以应用于注释类型。我们称之为元注释
进一步假设我有一个注释@Barney
,可以应用于一个类。假设@Barney
用元注释@Fred
进行注释。我们会说,任何用@Barney
注释的类都是用@Fred
注释的元注释的
现在假设我正在编写一个扩展,它对@Barney
一无所知,但确实知道@Fred
,并且希望使用@Fred
进行元注释
我正在寻找一种简单的方式来表达“嘿,BeanManager
[或其他一些机器],给我所有的Bean
都用@Fred
进行元注释。”
我知道我可以手动完成这项工作(手动浏览图表,获取类的注释,获取它们的注释,等等,直到我检测到有问题的元注释)
然而,我也知道,例如,Weld和其他CDI实现必须已经做了类似的事情来实现拦截器规范,因为拦截器绑定的传递方式基本相同。我常常因为忽略了简洁记录的CDI宇宙中的某些东西而感到内疚;我希望现在是这样
# 1 楼答案
我怀疑CDI-API中是否有一个函数可以完成这项工作。对于这些用例,CDI实现(比如Weld)中可能有一些私有助手类
但是下面的小函数应该告诉您“要测试的类”是否有注释,而注释又是带有某些内容的注释:
(与JAVA - How to get annotations from Annotation?相比)
如果需要深入研究,请小心递归调用,因为这很容易导致堆栈溢出。通常一个注释有元注释@Retention,后者有@Documented,后者又有@Retention。所以我希望递归不是必需的,简单的检查也可以
如果是的话,在您的分机上使用该功能应该很容易:
}