标签:参数 let 创建 syn 开发人员 注入 bean rest 程序启动
在传统的web开发时,我们创建一个Filter,需要在web.xml里做配置:
<filter> <filter-name>FirstFilter</filter-name> <filter-class>com.linhw.demo.filter.MyFirstFilter</filter-class> </filter> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/filter</url-pattern> </filter-mapping>
样每新增一个Filter类都要在web.xml增加一段类似的配置,很繁琐,降低了开发的效率。
SpringBoot提供了两种方式来解决这个问题:
引入依赖:
<!-- 核心启动器, 包括auto-configuration、logging and YAML --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- building web, including RESTful, applications using Spring MVC. 使用Tomcat作为嵌入式容器, @RestController由这个starter提供--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
@WebFilter(filterName="FirstFilter", urlPatterns={"/filter"}) public class MyFirstFilter implements Filter{ /** * web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取配置信息,完成对象的初始化功能, * 从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。 * 开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。 */ @Override public void init(FilterConfig filterConfig) throws ServletException { } /** * 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时, * Servlet容器将先调用过滤器的doFilter方法。 * FilterChain用户访问后续过滤器。 */ @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("MyFirstFilter 进入......"); arg2.doFilter(arg0, arg1); System.out.println("MyFirstFilter 离开......"); } /** * Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。 */ @Override public void destroy() { } }
@WebFilter注解的属性详解:
用注解的方式必须在SpringBoot启动类增加@ServletComponentScan注解,这样SpringBoot 启动时会扫描@WebFilter,实例化这些类。
/** * 区别于第一种方式,没有使用注解 */ public class MySecondFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("SecondFilter 进入......"); arg2.doFilter(arg0, arg1); System.out.println("SecondFilter 离开......"); } @Override public void destroy() { } }
这种方式需要在配置类上以@Bean的形式注入到Spring容器中。
@Configuration public class BootConfig { /** * 使用@Bean注解将名为"getFilter"的bean加入到容器 */ @Bean public FilterRegistrationBean getFilter(){ FilterRegistrationBean secondFilter = new FilterRegistrationBean(new MySecondFilter()); secondFilter.addUrlPatterns(new String[]{"/filter"}); return secondFilter; } }
标签:参数 let 创建 syn 开发人员 注入 bean rest 程序启动
原文地址:https://www.cnblogs.com/myitnews/p/12346777.html