我们有一个应用程序,它不断从第三方库加载ServletContainerInitializer的实例。
一个实例是JerseyServletContainerInitializer,另一个是SpringServletContainerInitializer。这些来自Jersey和Spring的类似乎“接管”了我们的servlet上下文,扰乱了我们的映射和过滤器等等。
我们确实需要显式配置servlet容器的web.xml,而这种自动扫描让我们发疯了。只需在pom.xml中引入依赖项,运行时ServletContext配置(如servlets/filters/contextListeners)就会发生变化,因为servlet容器会在类路径上找到这些库。
有没有一种方法可以使用Servlet3,但是禁用它恼人的自动类路径扫描“特性”?
摘自https://wiki.apache.org/tomcat/howto/fasterstartup
在WEB-INF/WEB.xml文件中可以指定两个选项:
设置metadata-complete=“true”将禁用扫描web应用程序及其库,以查找使用注释定义web应用程序组件(servlet等)的类。metadata-complete选项不足以禁用所有批注扫描。如果有一个带有@Handlestypes注释的SCI,Tomcat必须扫描应用程序以查找使用注释或该注释中指定的接口的类。
在Tomcat7中,绝对排序选项会影响web应用程序提供的SCI和容器(即$CATALINA_HOME/lib中的库)提供的SCI的发现。在Tomcat8中,该选项只影响web应用程序,而容器提供的SCI总是被发现的,无论绝对排序如何。在这种情况下,仅使用绝对排序选项并不能阻止对注释的扫描,但是要扫描的JAR列表将为空,因此扫描将很快完成。无论绝对顺序如何,WEB-INF/CLASSS中的类都将被扫描。
扫描web应用程序资源和TLD扫描不受这些选项的影响。
我正在编写一个新的SpringBoot项目,其中我的根包名是“com.example”。在我的gradle配置中,我添加了一个第三方库的依赖项,它的根包名为“org.base”。现在,这个库中有带有@Component注释的类,我想在代码中使用@Autowired 在我的配置类中,我也扫描第三方库的基本包。 当我运行应用程序时,spring无法从这个库中找到/创建bean,我得到了一个bean n
我的webapp包含一个库,其中包含一个用注释的类。如果存在此类,我的webapp(部署为EAR中的WAR)将无法启动,并出现以下错误: 我根本没有使用jersey,我没有使用任何jax-rs服务和我的web。xml不包含与jersey相关的servlet。我不明白为什么weblogic在我的应用程序中初始化jersey并扫描jars相关的JAR。 我在互联网上找到的与此相关的大多数信息导致人们以
我的appcontext-test.xml可以很好地处理这个 但当我试图理解spring时,我认为这可能也有用。因此,我注释了jpa:repositories标记,并用以下内容补充了我的组件扫描: 我的存储库是用@repository注释的 我
不知何故,Eclipse似乎不知道如何自动导入这个注释。再浏览了一些之后,我发现使用 工作,但有一个警告说: 访问限制:类型'PostConstruct'不是API(对所需库'C:\Program Files\java\jre1.8.0_45\lib\rt.jar')的限制
本文向大家介绍Spring组件自动扫描详解及实例代码,包括了Spring组件自动扫描详解及实例代码的使用技巧和注意事项,需要的朋友参考一下 Spring组件自动扫描详解及实例代码 问题描述 一个系统往往有成千上万的组件,如果需要手动将所有组件都纳入spring容器中管理,是一个浩大的工程。 解决方案 Spring 提供组件扫描(component scanning)功能。它能从classpath里
我们有一个依赖项(JAR),它确实包含一个清单文件,该文件在其条目中引用了其他JAR。应用程序不需要这些引用的其他JAR,因此不会作为依赖项添加。 当应用程序启动时,tomcat 会尝试解析该类路径条目,最终在日志中出现大量错误。喜欢: 如这里所述,Tomcat已经实现了一个开关来禁用清单的扫描,以防止出现此问题:https://bz.apache.org/bugzilla/show_bug.cg