ApplicationContextInitializer
?spring.factories
?背后的想法是创建一个小型库,如果将库添加到项目中,它将自动注册servlet过滤器。
也许有人更清楚如何从用户那里透明地做到这一点,支持Spring Boot和最重要的普通Spring(对于遗留应用程序)?
答案 0 :(得分:1)
你可以非常简单地做到这一点,你必须做一些事情:
1)为具有适当依赖关系的JAR模块创建适当的maven / gradle配置。
2)使用Filter配置创建配置类。例如:
package com.test;
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean contextFilterRegistrationBean() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
RequestContextFilter contextFilter = new RequestContextFilter();
registrationBean.setFilter(contextFilter);
registrationBean.setOrder(1);
return registrationBean;
}
}
3)创建文件src / main / resources / META-INF / spring.factories并添加:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.test.FilterConfig
4)发布/安装你的jar并将其作为Spring Boot应用程序的依赖项包含在内。
在此之后,FilterConfig应该在每个Spring Boot应用程序中自动加载您添加使用@EnableAutoConfiguration
的依赖项(I.E.使用注释@SpringBootApplication
)。
答案 1 :(得分:0)
在Configuration
类中创建Servlet bean,如下所示:
@Bean
public ServletRegistrationBean envServlet() {
EnvServlet envServlet = new EnvServlet();
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(envServlet, "/boot/env");
servletRegistrationBean.setName("bootEnvServlet");
return servletRegistrationBean;
}
spring会将org.springframework.boot.context.embedded.RegistrationBean
的子类注册到servlet容器。