我有一个" Handler"消息队列的接口,具有方法:
boolean canHandle(message);
void handle(message);
然后我有这个接口的多个实现,每个实现canHandle()某些类型的消息
当消息到达时,我会执行以下操作:
for (Handler handler : handlers) {
if handler.canHandle(message)
handle(message)
所以,我需要建立一个"启用处理程序列表"必须在配置文件中指定。
我可以通过类名(FQCN)指定启用的处理程序,或者通过某个名称注释该类并在配置上引用此名称。
例如:
enabledHandlers = ("com.domain.handlers.HandlerA", "com.domain.handlers.HandlerB", )
#or
enabledHandlers = ("HandlerAAnnotation", "HandlerBAnnotation", )
无论如何,不知怎的,我需要在我的服务中构建这些处理程序,并且它们需要注入参数。
我相信inject.getInstance(clazz)可以用来构建这些对象,但是使用#34;注入器"并不是很有意义。当我需要创建这些类时,绕过我的服务 我也可以通过反射创建它们"手动"通过clazz.getConstructor(...)。newInstance(...),但它看起来很脏。
还有其他想法吗?
谢谢!