避免在 Spring Boot 中为创建为 @Bean 的 Servlet 自动映射
Avoid automatic servlet mapping for a Servlet created as a @Bean in Spring Boot
我有一个 servlet,我需要通过自动装配为其提供依赖项(它是来自外部库的 class,我无法更改其代码)。我尝试将其注册为 bean,然后使用编程注册 (ServletContextInitializer
) 进行注册。这是我拥有的:
@Configuration
public class MyConfiguration {
@Bean
public MyServlet myServlet() {
return new MyServlet();
}
}
此外,Spring与 MVC 相关的自动配置会创建一个常用的 DispatcherServlet
并将其映射到 /
。
当我尝试启动应用程序时,我得到以下信息:
Caused by: java.lang.IllegalStateException: Multiple servlets map to path /: dispatcherServlet[mapped:JAVAX_API:null],myServlet[mapped:JAVAX_API:null]
因此看起来 Spring 引导(或 Spring 本身?)自动将 servlet 映射到默认值 /
。我想完全避免映射,因为我只需要创建 servlet 实例;稍后我会自己注册。
这可以做到吗?
你应该使用 ServletRegistrationBean
然后你可以提供额外的映射
@Bean
public MyServlet myServlet() {
return new MyServlet();
}
@Bean
public ServletRegistrationBean myServletRegistration(MyServlet myServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(myServlet,
"/myservlet/*");
registration.setLoadOnStartup(1);
return registration;
}
我有一个 servlet,我需要通过自动装配为其提供依赖项(它是来自外部库的 class,我无法更改其代码)。我尝试将其注册为 bean,然后使用编程注册 (ServletContextInitializer
) 进行注册。这是我拥有的:
@Configuration
public class MyConfiguration {
@Bean
public MyServlet myServlet() {
return new MyServlet();
}
}
此外,Spring与 MVC 相关的自动配置会创建一个常用的 DispatcherServlet
并将其映射到 /
。
当我尝试启动应用程序时,我得到以下信息:
Caused by: java.lang.IllegalStateException: Multiple servlets map to path /: dispatcherServlet[mapped:JAVAX_API:null],myServlet[mapped:JAVAX_API:null]
因此看起来 Spring 引导(或 Spring 本身?)自动将 servlet 映射到默认值 /
。我想完全避免映射,因为我只需要创建 servlet 实例;稍后我会自己注册。
这可以做到吗?
你应该使用 ServletRegistrationBean
然后你可以提供额外的映射
@Bean
public MyServlet myServlet() {
return new MyServlet();
}
@Bean
public ServletRegistrationBean myServletRegistration(MyServlet myServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(myServlet,
"/myservlet/*");
registration.setLoadOnStartup(1);
return registration;
}