java - 如何在 Tomcat 中使一个类对 Spring 可用?
问题描述
我正在使用一个具有模块化架构的应用程序 - 每个模块都包含在运行在 Tomcat 之上的 WAR 文件中。其中一个模块允许用户使用请求Interceptor
接口扩展其功能,该接口@Autowire
由 Spring 引入类中。
我正在开发一个自定义拦截器,并希望将它提供给 Spring 用于模块内的自动装配。到目前为止,我一直在构建包含我的拦截器的模块 WAR 的自定义版本,但我不认为这是一种干净的方法,因为我的想法是使应用程序易于扩展,并且出于这个原因构建我自己的分支似乎几乎消除了 Interceptor 接口的好处。
我知道一种可能性是打开 WAR(它只是一个 ZIP 存档)并在其中放置一个自定义 JAR,但这也感觉不对。也许有一种使用 Maven 添加自定义 JAR 的方法?有没有一种行业标准的方式来做到这一点?
解决方案
我想我至少有部分答案,欢迎大家提供更好的答案。
有一个关于 Tomcat 中的类加载的有用文档页面。它描述了从哪里加载类,下面转载了对普通读者最感兴趣的片段:
JAR 文件中的解压缩类和资源
JAR$CATALINA_BASE/lib
文件中的$CATALINA_BASE/lib
解压缩类和资源$CATALINA_HOME/lib
$CATALINA_HOME/lib
WebappX — 为部署在单个 Tomcat 实例中的每个 Web 应用程序创建一个类加载器。Web 应用程序目录中的所有解压缩类和资源,/WEB-INF/classes
以及 Web 应用程序目录下 JAR 文件中的类和资源,/WEB-INF/lib
对这个 Web 应用程序可见,但对其他应用程序不可见。
推荐阅读
- javascript - d3 树工具提示不出现
- scala - Scala:如何异步捕获通过 Kafka 发送的所有多条消息的状态?
- android - GPS位置检索和在后台比较值的最佳方法?
- javascript - 大量输入,但在 redux-saga 中只有一个按钮提交
- python-3.x - 如何优化xgb回归模型?
- autohotkey - 逐个字符粘贴剪贴板中的文本
- python - 从列表推导转换回 for 循环
- asp.net-mvc - 将 Asp .net 验证放入常规 html 标记
- objective-c - 如何在 macOS 中以编程方式更新应用商店应用程序?
- pandas - Camelot 对待相同的单元格不同的行