我有一个实现Action接口的操作列表。
FooAction implements Action
BarAction implements Action
我希望能够处理列表中的每个操作: -
List<Action> actions = new ArrayList<Action>;
..
for( Action action : actions)
action.process();
是否有可能让Guice(或春天!)将所有单独的动作注入动作列表? 我知道我可以编写代码来手动创建一个这样的集合: -
Multibinder<Action> actionBinder = Multibinder.newSetBinder(binder(), Action.class);
actionBinder.addBinding().to( FooAction.class );
actionBinder.addBinding().to( BarAction.class );
但如果我能编写自动拾取并注入我的列表的新动作类,那会很好吗? 或者这只是一厢情愿的想法。
答案 0 :(得分:2)
正如mlk所说,你正在寻找一个类路径扫描器。我们使用反思:
http://code.google.com/p/reflections/
您可能希望查看其“getSubTypesOf”方法。我们广泛使用它以及它们的“getTypesAnnotatedWith”方法在启动时查找某种风格的所有类,以便它们可以在启动时绑定到列表。
答案 1 :(得分:1)
Java并不知道所有可用的实现。您必须遍历类路径中的所有类并检查它们(请参阅Find Java classes implementing an interface),另一个选项是通过已知位置的配置文件通知Guice或Spring(这是插件经常工作的方式)。