我正在开发一个应用程序(Quartz scheduler),我们有一个工作类负责实际执行工作,我们需要告知/传递作业类的名称同时在Quartz调度器中创建一个触发器。查找所有实现特定接口的类
我想为所有想使用API的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业之外)。这个想法是创建一个(标记)接口,如果任何人想将他们的类声明为调度器作业类,他们所要做的就是(声明)实现接口。
我不知道如何找到哪些类遵循合同(通过实现接口),以便我可以将它们展示给希望在调度程序中调度触发器的用户。
我的要求是不在运行时加载类,而是显示实现所需接口的类的用户列表,以便用户可以选择类并将类名传递给调度程序。这是Quartz调度器,最后将负责创建一个类的实例。
任何人都可以建议我如何实现上述目标,或者是否有其他更好的方法来实现我想要做的事情?
编辑
我通过ServiceLoader的文档去了,似乎是实现服务一个具有创建在META-INF文件夹中的文件,实现类的名字,这使我认为如果我的API的用户需要20个不同的实现,他必须在文件中放入20个条目,这对我来说似乎对最终用户来说是很多额外的工作,因为每个工作类将被创建用于执行特定工作,并且可以成为100个工作班。
如果我的假设错误,请纠正我。
另一个尝试是创建一个注释,然后搜索注释的类。这里http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime说如何实现它。 – polypiel 2012-04-03 10:21:43
这会有帮助吗? [链接](http://www.javaworld.com/javaworld/javaqa/2003-07/02-qa-0725-classsrc2.html?page=1) – titogeo 2012-04-12 09:20:04