java - 查找包含 Spring WebApplicationInitializer 的依赖项
问题描述
我有一个包含各种 Spring 依赖项的项目。
'org.springframework:spring-core:4.3.2.RELEASE',
'org.springframework:spring-jdbc:4.3.2.RELEASE',
'org.springframework:spring-beans:4.3.2.RELEASE',
'org.springframework:spring-web:4.3.2.RELEASE'
...以及许多其他依赖项。
当我将它部署到 Tomcat 8.5.8 时,我看到了这条消息......
1 Spring WebApplicationInitializers detected on classpath
该消息与SpringServletContainerInitializer.java的 spring-framework 源代码中的消息相匹配从该源代码和文档看来,
- Tomcat 将扫描实现 WebApplicationInitializer 的非抽象可构造类的类路径,并且 SpringServletContainerInitializer 将为找到的每个类创建一个实例。
- 某些库或依赖项可能包含一个已找到并实例化的 WebApplicationInitializer。
- Spring 本身包括 WebApplicationInitializers,但它们似乎都是抽象的。
我的代码没有 WebApplicationInitializer。
问题:我想找到某个库包含的 Initializer,以了解包含它的库。
想到的方法是......
获取 Spring-Framework 或 Tomcat 源代码。在 SpringServletContainerInitializer 或 Tomcat 的 ContextConfig 类中放置一个断点,并检查找到和使用了哪些类。
破解项目,移除依赖项,直到 WebApplicationInitializer 消失。(复杂的)
有没有更好(更快)的方法,即开启某种程度的日志记录?
我从 Tomcat 和 Spring 文档中尝试了一些详细的日志记录说明,但没有成功。
我将获得 Tomcat 源代码。我肯定会学到一些东西。
解决方案
有两种方法奏效。
获取tomcat、spring-framework、jersey的源码并在Netbeans中调试启动过程....发现
- Tomcat 处理来自 Jasper 的 ServletContainerInitializers、Tomcat 自己的 Websockets 服务和
SpringServletContainerInitializer
. (预期/记录) - Tomcat 将来自 Jersey 的 WebApplicationInitializer 传递给 SpringServletContainerInitializer,
org.glassfish.jersey.server.spring.SpringWebApplicationInitializer
在我的例子中假设您的类路径中有一个 applicationContext.xml。
- Tomcat 处理来自 Jasper 的 ServletContainerInitializers、Tomcat 自己的 Websockets 服务和
这给了我我正在寻找的信息。
根据 M Deinum 的评论,我尝试将我的项目导入 IntelliJ 并为 WebApplicationInitializer 进行全局搜索(Mac 上的 shift-shift)。
- 这无需进一步准备即可工作,因为 IntelliJ 的全局搜索使用反射和它们的 Java 反编译器的某种组合来读取库 jar 并查找用法,然后显示结果的反编译源代码。
- 第一次显示反编译源时弹出的警告信息很清楚。
据我所知,Netbeans 没有用于搜索依赖 jar 的自动扫描和反编译器选项。
如果你有 IntelliJ,最快的方法是全局搜索。
推荐阅读
- sql - Django,如何修改相关模型serizlizer的输出?
- xaml - Xamarin.Forms:如何在 2 ScrollLayout 上方和之间放置圆形图像
- javascript - 更改滚动标题的背景颜色
- reactjs - 反应:为什么变量“名称”不会在渲染中显示?
- ios - 在堆栈视图/网格项目中添加布局约束的最佳实践?(Xcode iOS)
- r - 如何从 ggmap 输出中提取邮政编码?
- regex - 正则表达式捕获组以匹配任何带有大写字母的 URL
- google-analytics-api - 升级到 Google Analytics API v4 而不是等待新的 alpha API 可用?
- tensorflow - Tensorboard:找不到 TensorFlow 安装
- python - 在绘图破折号中绘制预测