我想创建一个通用的观察者方法,它能够观察实现特定接口的任何事件,并且根据在应用程序启动时解析的配置文件,将用户重定向到特定页面。
此页面由事件类及其限定符定义。在运行时很容易上课,但我不知道应该在哪里放置InjectionPoint以获得事件限定符,或者是否有更好的方法。
说,我在@ApplicationScoped bean中有这个方法(Event是一个空接口,由所有具体的事件类实现):
public void processEvent(@Observes @Any Event pEvent)
{
System.out.println(pEvent.getClass());
}
此时是否可以获得pEvent的实际限定符?
/编辑:
似乎CDI 1.1正是我需要的EventMetadata形式:http://docs.jboss.org/cdi/api/1.1/javax/enterprise/inject/spi/EventMetadata.html
可悲的是,WebSphere 8.5具有CDI 1.0并且缺少所述类。
答案 0 :(得分:1)
遗憾的是,无论是在谷歌上搜索还是在“CDI事件元数据”(或其他类似搜索)的StackOverflow上搜索都会返回正确的结果。 实际上目前的问题都没有找到...... 您需要知道“EventMetaData”的确切名称(没有空格)。
我需要查看CDI 2.0工作组文档以找出这个EventMetaData类(从CDI 1.1开始可用)。如何使用它的一个例子:
public void onLifeCycleChange(@Observes @Any Customer customer,
EventMetadata eventMetadata) {
Annotation annotation = new AnnotationLiteral<Foo>() {};
if (eventMetadata.getQualifiers().contains(annotation)) {
reset();
}
}
这个问题需要加以提高,以提高知名度(但由于缺乏声誉,我不能自己做)