我可以使用CDI在任何bean中查找所有带限定符注释的方法吗



我想为我的业务逻辑实现一种模式,类似于处理WebSocket注释方法的方式。给定传入消息的特定参数的值,我想在动态查找的托管bean中调用一个带注释的方法。例如,给定以下设置:

@Qualifier
@Target( ElementType.METHOD )
@Retention( RetentionPolicy.RUNTIME )
public @interface Handler { }
@ApplicationScoped public class MyHandler1 {
  @Handler public void someMethod() { }
  @Handler public void otherMethod() { }
}

然后我想写一个函数,根据这个参数值来选择一个方法。它应该很简单,只需给定"someMethod"作为一个值,并使用名为"someMethod"的方法查找我的合格托管bean并调用它。

我的问题是使用Instance<…>选择bean仅适用于类型级别限定符和/或类型。要真正找到方法,我需要遍历所有方法。我有点担心查找的成本和/或必须管理缓存或某种排序。

您不应该使用限定符来标记方法,任何其他注释都可以。

然后,如果您确实想使用CDI,那么您可以编写一个CDI扩展来观察ProcessAnnotatedType事件。

话虽如此,从你的问题描述来看,我真的不确定你到底想做什么,也不确定CDI是否是最好的方法。

您可以使用https://code.google.com/p/reflections/扫描你的课程。它速度很快,可以很容易地缓存。你甚至可以使用反射maven插件在编译时进行扫描。。。

相关内容

  • 没有找到相关文章

最新更新