首页 > 解决方案 > 如何在 Tomcat 中使一个类对 Spring 可用?

问题描述

我正在使用一个具有模块化架构的应用程序 - 每个模块都包含在运行在 Tomcat 之上的 WAR 文件中。其中一个模块允许用户使用请求Interceptor接口扩展其功能,该接口@Autowire由 Spring 引入类中。

我正在开发一个自定义拦截器,并希望将它提供给 Spring 用于模块内的自动装配。到目前为止,我一直在构建包含我的拦截器的模块 WAR 的自定义版本,但我不认为这是一种干净的方法,因为我的想法是使应用程序易于扩展,并且出于这个原因构建我自己的分支似乎几乎消除了 Interceptor 接口的好处。

我知道一种可能性是打开 WAR(它只是一个 ZIP 存档)并在其中放置一个自定义 JAR,但这也感觉不对。也许有一种使用 Maven 添加自定义 JAR 的方法?有没有一种行业标准的方式来做到这一点?

标签: javaspringmaventomcatmodule

解决方案


我想我至少有部分答案,欢迎大家提供更好的答案。

有一个关于 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 应用程序可见,但对其他应用程序不可见。


推荐阅读