使用 Spring 设计 Java 库

2024-01-08

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

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

我真的不知道我的库初始化选项是什么:

  • 如何初始化库的上下文?我不能假设库用户也会使用 Spring,但我可以将 Spring 与库一起分发。

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


如何初始化库的上下文?我不能假设 库用户也会使用 Spring,但我可以分发 Spring 与图书馆。

我也在使用 Spring 上下文编写一个库,我做了类似的事情,假设你的库被称为FooLib,有两个服务称为食品服务 and 酒吧服务和一个名为 SpringContext 的类,它通过 java config 配置你的 spring 上下文:

public final class FooLib {

    private static ApplicationContext applicationContext;

    private FooLib() {
    }

    public static FooService getFooService() {
        return getApplicationContext().getBean(FooService.class);
    }

    public static BarService getBarService() {
        return getApplicationContext().getBean(BarService.class);
    }

    private static ApplicationContext getApplicationContext() {
        if (applicationContext == null) {
            applicationContext = new AnnotationConfigApplicationContext(SpringContext.class);
        }
        return applicationContext;
    }
}

然后客户端可以使用BarService这边走:

BarService barService = FooLib.getBarService();

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

您可以在 Spring 上下文中静态启动监控子系统,例如在 SpringContext 类中。

@Configuration
@ComponentScan(basePackages = "com.yourgroupid.foolib")
public class SpringContext {

    @Bean
    public MonitoringSystem monitoringSystem() {
        MonitoringSystem monitoringSystem = new MonitoringSystem();
        monitoringSystem.start();
        return monitoringSystem;
    }

}

这应该足够了,因为 Spring 默认情况下会急切地创建它的 bean。

Cheers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spring 设计 Java 库 的相关文章

随机推荐

  • WebBrowser IFrame 访问导致未经授权的访问?

    当我尝试访问此内容时 var anchors webBrowser1 Document Window Frames 0 Document GetElementsByTagName a 我收到未经授权的访问异常 到底是怎么回事 我可以在抛出异
  • 将多个 Excel 文件/工作表导入 SQL 表

    我有大约 100 个 xlsx 文件 每个文件都有 1 7 张 每个文件和工作表都具有与我想要将所有内容导入到的表相同的列 我可以成功地使用它 SELECT FROM OPENROWSET Microsoft ACE OLEDB 12 0
  • OpenCV 与 JavaCV 或仅 OpenCV 使用 java API

    我是 OpenCV 库的新手 我想使用 openCV 的 Java API 我在网站上阅读了有关如何安装 openCV 并将其用作 Eclipse 中的库的说明 现在让我困惑的是 因为我想用 Java 编程 我应该使用 JavaCv 吗 或
  • 黑莓 Facebook NoClassDefFoundError

    我可能做了一些愚蠢的事情 但我访问 BB Facebook 功能的尝试失败了 这是代码 直接取自提供的 FB 示例代码 String NEXT URL http www facebook com connect login success
  • 创建临时 zip 工件的 Maven 最佳实践

    假设我需要管理一个包含任意文件夹 文件结构 汇总为 zip 存档 的工件 我不清楚如何在 Maven 中以最适合 Maven 方式 的方式完成此任务 我知道没有 zip 包装类型 这是否意味着 Maven 中没有通用的生命周期来简单地获取资
  • 在 JavaScript 中使用“return”代替“else”

    我正在开发一个需要一些非常复杂的 JavaScript 处理的项目 这包括很多嵌套if else在很多地方都有 我通常会通过阅读 Stack Overflow 上的其他提示来尽可能地优化 JavaScript 代码 但我想知道以下两种构造是
  • 应用程序未出现在 Samsung Galaxy Tab 上的 Android Market 中

    从 Samsung Galaxy Tab 查看时 我的某些应用程序不会出现在 Android Market 中 我注意到其他开发人员的许多其他应用程序也发生了这种情况 如果我将 Nexus One 上的市场中某个类别的 刚刚上线 与 Gal
  • 带重定向的 PHP Curl 登录不起作用

    我有以下 PHP 脚本 它应该获取登录表单后面的页面内容 它在我的本地主机服务器上工作正常 但在主机 GoFreeServe 上不起作用 我得到的回复是空的 postResult 为空 Script login url http senio
  • 核心数据内存管理

    我已经阅读了核心数据文档中的内存管理部分 但我仍然有点困惑 我的应用程序中有一个上下文 并且我有几件事可以从中获取对象 例如 一些获取结果控制器 详细视图和一些其他获取随机对象的代码 一旦对象被完全释放并且其保留计数为0 核心数据是否会自动
  • 如何在Mysql中插入印地语

    我按照描述更改了字符集here https www daniweb com programming web development threads 361061 hindi data in sql post1542310但不起作用 CREA
  • .htaccess 仅允许来自 Chrome、Opera、Mozilla、Safari,从其他重定向

    如果用户不使用 Chrome Safari Opera 或 Mozilla 我想配置重定向 对于逆问题 如果我不想要 Chrome 等 有一个解决方案 RewriteCond HTTP USER AGENT Chrome RewriteRu
  • MatExpansionPanel 表达式在检查错误“mat-expanded:true”后已更改

    我有一个角度材质扩展面板查询列表 ViewChildren MatExpansionPanel matExpansionPanelQueryList QueryList
  • 仅当作为 FastAPI 调用的一部分返回时才排除 pydantic 模型字段

    Context 我有一个非常复杂的 pydantic 模型 其中有很多嵌套的 pydantic 模型 我想确保某些字段永远不会作为 API 调用的一部分返回 但我希望这些字段用于内部逻辑 我尝试过的 我首先尝试使用 pydanticFiel
  • 使用 Objective-C 的传递和访问结构

    我想知道如何将结构传递给另一个函数 然后在被调用函数中访问该结构 我正在为 iPhone 进行开发 我使用结构的原因是这样我最终可以将数据作为结构传递到用 C 构建的服务器 结构如下 struct userInfo NSString fir
  • 如何在PHP中比较两个日期[重复]

    这个问题在这里已经有答案了 如果日期格式正确 如何在 php 中比较两个日期 03 01 12 and 31 12 11 我正在使用这段代码 date1 date d m y date2 31 12 11 if strtotime date
  • 为什么 boost 示例再次调用“shared_from_this()”而不是使用闭包变量

    在连接对象中boost asio HTTP 服务器示例 http www boost org doc libs 1 57 0 doc html boost asio example cpp11 http server connection
  • knockoutjs 提交时出现 ko.utils.postJson 问题

    我跟着http blog stevensanderson com 2010 07 12 editing a variable length list knockout style http blog stevensanderson com
  • Meteor:对电子邮件验证确认执行某些操作

    在我的服务器上 我设置帐户需要电子邮件验证并发送验证电子邮件 Accounts config sendVerificationEmail true forbidClientAccountCreation false 我在网上的某个地方读到
  • python:不可变的私有类变量?

    有没有办法把这个Java代码翻译成Python class Foo final static private List
  • 使用 Spring 设计 Java 库

    我正在将现有程序中的一些功能提取到一个单独的库中 该程序使用 Spring 进行依赖注入和其他任务 我也想继续在库中使用它 该库需要监视文件系统的更改 因此它将启动某种单独的线程来执行此操作 我真的不知道我的库初始化选项是什么 如何初始化库