我正在尝试一个小框架,我在类中定义了一堆动作。我想编写一个url调度程序,它将根据匹配操作类中指定的url模式调用相关操作。我想避免在调度程序类本身中创建所有可用操作的冗余列表,而是让它在程序启动时动态加载操作的实例。
我最初认为我可以将所有这些操作放在特定的包中,然后让我的调度程序搜索实现操作界面的所有类的包,并将它们加载到可以调用的操作实例列表中。
从我的谷歌搜索我发现似乎没有办法真正获得包中存在的类列表(由于类如何能够以多种不同的方式加载)。
所以我的问题:这实际上是可行的,我将如何解决这个问题?但也许这个问题太多了,这是不是一个好主意?我可以采取哪些其他方法,还有其他人在java中对类进行动态调度的示例吗?
答案 0 :(得分:0)
由于其含糊不清,我不确定我是否完全理解了这个问题,但这听起来与Java Servlets已经完全相似。不是吗?
@WebServlet(name = "Action1",urlPatterns = {"/actions/Action1"})
public class SampleServlet extends HttpServlet {
//...
}
这不适合你吗?
或者,您可以使用Google Reflections之类的库来发现所有带注释的类:
@Action(url="/actions/one.do")
class MyAction {
public void execute(){
//..
}
}
例如:
Reflections reflections = new Reflections("com.jedi.academy");
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(Action.class);
这会给我一个包含MyAction.class
。