首页 > 编程语言 > 详细

SpringBoot:Web原生组件注入

时间:2021-04-11 21:13:22      阅读:10      评论:0      收藏:0      [点我收藏+]

注入方式

Web原生组件指的是:Servlet、Filter、Listener

注解注入

@WebServlet(urlPatterns = "/myServlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("servlet");
    }
}

main方法加上@ServletComponentScan

@ServletComponentScan
@SpringBootApplication
public class Boot2MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(Boot2MyApplication.class, args);
    }
}

技术分享图片

官方文档也是这样说明的:

技术分享图片

测试filter:

@Slf4j
@WebFilter(urlPatterns = "/myServlet")
public class MyFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("init");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info("MyFilter doFilter");
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        log.info("destroy");
    }
}

技术分享图片

RegistrationBean方式

官方文档上上面还写了一个方式:

技术分享图片

测试:先注释掉filter和servlet上面的注解

编写配置类:

@Configuration
public class MyRegistryConfig {

    @Bean
    public ServletRegistrationBean<MyServlet> myServlet(){
        MyServlet myServlet = new MyServlet();
        return new ServletRegistrationBean<>(myServlet, "/myServlet");
    }

    @Bean
    public FilterRegistrationBean<MyFilter> myFilterFilterRegistrationBean(){
        MyFilter myFilter = new MyFilter();
        return new FilterRegistrationBean<>(myFilter,myServlet());
    }
}

测试,仍然成功。Listener与其类似,使用的是ServletListenerRegistrationBean注册,这里不再演示。

DispatcherServlet注册原理

进入DispatcherServletAutoConfiguration自动配置类:有一个内部类DispatcherServletConfiguration

这里向容器中注入了一个DispatcherServlet,DispatcherServlet默认处理的请求路径是“/”

技术分享图片

后面又有一个DispatcherServletRegistrationConfiguration,向容器中注册了DispatcherServletRegistrationBean,并设置了DispatcherServlet

技术分享图片

DispatcherServletRegistrationBean是继承于ServletRegistrationBean

技术分享图片

在tomcat中,Servlet处理请求为精确优先处理原则。

如果有两个servlet,AServlet可以处理"/",BServlet可以处理“/hello”,那么如果发送“/hello”请求,则为BServlet处理,因为BServlet比AServlet精确。

SpringBoot:Web原生组件注入

原文:https://www.cnblogs.com/wwjj4811/p/14643899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!