SpringBoot:Web原生组件的注入

1.使用Servlet API

在配置类中加入注解:

@ServletComponentScan(basePackages = "com.tinstu") :指定原生Servlet组件都放在那里

新建servlet加入注解:@WebServlet(urlPatterns = "/my")  效果:直接响应,没有经过Spring的拦截器

@WebServlet(urlPatterns = "/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("5555");
    }
}

 @WebFilter(urlPatterns={"/css/*","/images/*"})

@WebFilter(urlPatterns = "/tp")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter初始化完成");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter工作");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }
    @Override
    public void destroy() {
        System.out.println("filter销毁");
    }
}

@WebListener

@WebListener
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听到项目初始化完成");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("监听到项目销毁");
    }
}

使用RegistrationBean

ServletRegistrationBeanFilterRegistrationBean, and ServletListenerRegistrationBean

@Configuration(proxyBeanMethods = true)  //保证依赖的组件始终都单实例的
public class MyRegistConfig {
    @Bean
    public ServletRegistrationBean myServlet(){
        MyServlet myServlet = new MyServlet();
        return new ServletRegistrationBean(myServlet,"tp1","tp");
    }
    @Bean
    public FilterRegistrationBean myFilter(){
        MyFilter myFilter = new MyFilter();
  //    return new FilterRegistrationBean(myFilter,myServlet());
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/tp","/pt/*"));
        return filterRegistrationBean;
    }
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        MyListener myListener = new MyListener();
        return new ServletRegistrationBean((Servlet) myListener);
    }
}

DispatchServlet注入原理

 

阅读剩余
THE END