【发布时间】:2012-04-16 23:43:18
【问题描述】:
我正在开发一个应用程序(Quartz 调度程序),其中我们有一个负责实际执行工作的作业类,我们需要在 Quartz 中创建触发器时告诉/传递作业类的名称调度程序。
我想为所有想要使用 API 的人提供一个扩展点(除了我将作为 API 的一部分提供的一些通用作业之外)。这个想法是创建一个(标记)接口,如果有人想将他们的类声明为调度程序作业类,他们所要做的就是(声明)实现该接口。
我不确定如何找到遵循合同的类(通过实现接口),以便将它们显示给想要在调度程序中安排触发器的用户。
我的要求不是在运行时加载类,而是显示实现所需接口的类的用户列表,以便用户可以选择类并将类名传递给调度程序。最后是 Quartz 调度器负责创建一个类的实例。
任何人都可以建议我如何实现上述目标,或者有没有其他更好的方法来实现我想要做的事情?
编辑
我浏览了ServiceLoader 的文档,似乎为了实现一项服务,必须在 META-INF 文件夹中创建一个具有实现类名称的文件,这让我认为,如果我的 API 需要 20 个不同的实现,他必须在文件中放入 20 个条目,这对我来说似乎对最终用户来说是很多额外的工作,因为每个作业类都将创建用于执行特定的作业,并且可能有 100 个作业类。
如果我的假设是错误的,请纠正我。
【问题讨论】:
-
另一种尝试是创建一个注释,然后搜索带注释的类。这里stackoverflow.com/questions/259140/… 说如何实现它。
-
这会有帮助吗? link
标签: java jakarta-ee quartz-scheduler