我有一个包含各种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源代码中的消息匹配。从该源代码和文档中可以看出,
我的代码没有WebApplicationInitializer。
问题:我想找到某个库中包含的初始化程序,以了解哪个库包含它。
想到的方法是......
获取Spring-Framework或Tomcat源代码。在SpringServletContainerInitializer或Tomcat的ContextConfig类中放置一个断点,并检查找到和使用的类。
破解项目,取消依赖项,直到WebApplicationInitializer消失。 (复)
是不是有更好(更快)的方式,即开启一定程度的日志记录?
我已经尝试过Tomcat和Spring文档的一些详细的日志记录指令但没有成功。
我将获得Tomcat源代码。当然,我会学到一些东西。
答案 0 :(得分:0)
两种方法都有效。
获取tomcat,spring-framework,jersey的源代码并调试Netbeans中的启动过程....发现
public class HttpFactory : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler()
{
return new CustomMessageHandler();
}
}
public class CustomMessageHandler : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var content = await request.Content.ReadAsByteArrayAsync();
return await base.SendAsync(request, cancellationToken);
}
}
FlurlHttp.Configure(settings =>
{
settings.HttpClientFactory = new HttpFactory();
});
处理了ServletContainerInitializers。 (预期/记录)SpringServletContainerInitializer
的WebApplicationInitializer,假设你的类路径中有一个applicationContext.xml。这给了我正在寻找的信息。
根据M Deinum的评论,我尝试将我的项目导入IntelliJ,并为WebApplicationInitializer进行全局搜索(Mac上的移位)。
据我所知,Netbeans没有这种自动扫描加反编译选项来搜索依赖关系罐。
如果你有IntelliJ,最快的答案是全局搜索。