一尘不染

使用Spring设计Java库

java

我将从现有程序中提取一些功能到单独的库中。该程序使用Spring进行依赖项注入和其他任务,我也想在库中继续使用它。

该库需要监视文件系统的更改,因此它将启动某种单独的线程来执行此操作。

我真的不知道我对库的初始化有什么选择:

  • 如何初始化图书馆的环境?我不能认为图书馆用户也将使用Spring,但是我可以将Spring与图书馆一起分发。

  • 如何管理文件系统监视线程?期望程序实例化库的主类和调用init或类似的东西,这是好的设计吗?


阅读 232

收藏
2020-12-03

共1个答案

一尘不染

如何初始化图书馆的环境?我不能认为图书馆用户也将使用Spring,但是我可以将Spring与图书馆一起分发。

由您的库决定如何以所需的方式实例化spring。这通常是在您的接口入口点完成的,该接口入口点使用例如ClassPathXmlApplicationContext配置spring的方法委托给例程。一个样本可能是

public class SpringContextLoader {
   private static ApplicationContext ctx = null;
   public static void init() {
       if (ctx == null) {
          ctx = ClassPathXmlApplicationContext("classpath:/applicatonContext.xml");
       }
   }
}

如何管理文件系统监视线程?期望程序实例化库的主类和调用init或类似的东西,这是好的设计吗?

在这种情况下,您可能会提供一个非守护线程,例如,必须手动终止的线程才能使应用程序正常退出。因此,您应该提供startstop机制。在您的情况下,最好将它们调用registerEventListenerunregisterAllEventListener(因为我猜您想将文件系统事件传递给客户端…)。另一种选择是在quartzSpring中使用调度。

2020-12-03