gpt4 book ai didi

java - 查找哪个依赖项包含 Spring WebApplicationInitializer

转载 作者:行者123 更新时间:2023-11-28 23:15:11 28 4
gpt4 key购买 nike

我有一个包含各种 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。

问题:我想找到某个库包含的初始化程序,以了解哪个库包含它。

想到的方法是......

  1. 获取 Spring 框架或 Tomcat 源代码。在 SpringServletContainerInitializer 或 Tomcat 的 ContextConfig 类中放置一个断点,并检查找到和使用了哪些类。

  2. 破解项目,去除依赖关系,直到 WebApplicationInitializer 消失。 (复杂)

没有更好(更快)的方法,即打开某种级别的日志记录吗?

我尝试了 Tomcat 和 Spring 文档中的一些详细的日志记录说明,但没有成功。

我要获取 Tomcat 源代码。我当然会学到一些东西。

最佳答案

两种方法都有效。

  1. 获取 tomcat、spring-framework、jersey 的源代码并在 Netbeans 中调试启动过程....发现

    • Tomcat 从 Jasper、Tomcat 自己的 Websockets 服务和 SpringServletContainerInitializer 处理了 ServletContainerInitializers。 (预期/记录)
    • Tomcat 向 SpringServletContainerInitializer 传递了一个来自 Jersey 的名为 org.glassfish.jersey.server.spring.SpringWebApplicationInitializer 的 WebApplicationInitializer,在我的例子中,它假定您的类路径上有一个 applicationContext.xml。

这给了我正在寻找的信息。

  1. 根据 M Deinum 的评论,我尝试将我的项目导入 IntelliJ 并进行全局搜索(在 Mac 上为 shift-shift)WebApplicationInitializer。

    • 这无需进一步准备即可工作,因为 IntelliJ 的全局搜索使用反射及其 Java 反编译器的某种组合来读取库 jar 并查找用法,然后显示反编译后的源代码以获得结果。
    • 第一次显示反编译源时弹出的警告信息很清楚。

据我所知,Netbeans 没有这种自动扫描加反编译器选项来搜索依赖 jar。

如果您有 IntelliJ,找到答案的最快途径是全局搜索。

关于java - 查找哪个依赖项包含 Spring WebApplicationInitializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50828841/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com