我将从现有程序中提取一些功能到单独的库中。该程序使用Spring进行依赖项注入和其他任务,我也想在库中继续使用它。
该库需要监视文件系统的更改,因此它将启动某种单独的线程来执行此操作。
我真的不知道我对库的初始化有什么选择:
如何初始化图书馆的环境?我不能认为图书馆用户也将使用Spring,但是我可以将Spring与图书馆一起分发。
如何管理文件系统监视线程?期望程序实例化库的主类和调用init或类似的东西,这是好的设计吗?
由您的库决定如何以所需的方式实例化spring。这通常是在您的接口入口点完成的,该接口入口点使用例如ClassPathXmlApplicationContext配置spring的方法委托给例程。一个样本可能是
ClassPathXmlApplicationContext
public class SpringContextLoader { private static ApplicationContext ctx = null; public static void init() { if (ctx == null) { ctx = ClassPathXmlApplicationContext("classpath:/applicatonContext.xml"); } } }
在这种情况下,您可能会提供一个非守护线程,例如,必须手动终止的线程才能使应用程序正常退出。因此,您应该提供start和stop机制。在您的情况下,最好将它们调用registerEventListener和unregisterAllEventListener(因为我猜您想将文件系统事件传递给客户端…)。另一种选择是在quartzSpring中使用调度。
start
stop
registerEventListener
unregisterAllEventListener
quartz