本笔记基于springBoot 2.3.3版本
一般我们平常如果要使用Filter,会用到如下代码。
@Configuration
@ConditionalOnClass(CoreFilter.class)
public class CoreFilterAutoConfiguration {
@Bean
public FilterRegistrationBean coreFilterAutoConfig() {
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new CoreFilter());
return bean;
}
}
图中我们可以看到,在CoreFilterAutoConfiguration配置类里我们定义一个@Bean注解,将码好的CoreFilter过滤器装入FilterRegistrationBean,最后注入到spring容器中去。
源码分析:
ServletContextInitializer
这个接口是spring提供的专门给Servlet,Filter,Lister组件使用的。我们看一下其集成UML图:
图中我们可以看到,上图分别是Filter,Servlet,Listener组件的spring类UML图。我们重点看第一张Filter图。通过上文我们知道,Filter是在StandardContext初始化阶段进行加载装入的。代码如下:
for (Map.Entry<ServletContainerInitializer, Set<Class<?>>> entry :
initializers.entrySet()) {
try {
1.entry.getKey().onStartup(entry.getValue(),
getServletContext());
} catch (ServletException e) {
log.error(sm.getString("standardContext.sciFail"), e);
ok = false;
break;
}
}
// Configure and call application event lis