基本介绍
考虑到实际开发业务非常复杂和需要兼容各种组件,SpringBoot 支持将 Servlet、Filter、Listener 注入
Spring 容器, 成为 Spring bean。
注解方式注入
我们要想使用Servlet、Filter、Listener,只需要要javaWeb那样使用对应的注解即可,也就是@WebServlet,@WebListener,@WebFilter。示例代码如下
@WebServlet(urlPatterns = "/myServlet")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("MyServlet--被访问");
}
}
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听器--contextInitialized");
}
}
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器--doFilter");
filterChain.doFilter(servletRequest, servletResponse);
}
}
如果使用这种方式,那么我们还需要在配置类上添加一个@ServletComponentScan注解,这个注解用于指定扫描原生Servlet组件的路径
我在启动类上指定了扫描路径
启动项目,监听器生效了
下面访问一下我们自己定义的servlet
可以发现Servlet和Filter都生效了,这个就是第一种方式,这种方式注入的组件并不是由springboot来进行管理的,二是由tomcat进行管理,下面介绍第二种方式,这种方式会将原生Web组件注册成为一个bean,并交由springboot进行管理。
使用RegistrationBean 方式注入
我们先将@ServletComponentScan这个注解注释掉,然后使用RegistrationBean 方式注入。
我们顺便也把@WebServlet,@WebListener,@WebFilter这些注解给注释掉
我们使用RegistrationBean的方式如下
@Configuration
public class OriginalWebConfig {
@Bean
public ServletRegistrationBean<MyServlet> myServletServletRegistrationBean() {
MyServlet myServlet = new MyServlet();
return new ServletRegistrationBean<>(myServlet, "/myServlet");
}
@Bean
public FilterRegistrationBean<MyFilter> myFilterFilterRegistrationBean() {
MyFilter myFilter = new MyFilter();
return new FilterRegistrationBean<>(myFilter);
}
@Bean
public ServletListenerRegistrationBean<MyListener> myListenerServletListenerRegistrationBean() {
MyListener myListener = new MyListener();
return new ServletListenerRegistrationBean<>(myListener);
}
}
我们只需要在配置类中返回对于的RegistrationBean即可,其中ServletRegistrationBean可以在构造函数中指定路径。下面来启动项目
监听器没有问题,下面来访问下/myServlet
可以发现也没有问题,下面我们就来看一下在spring容器中是否有上面的几个组件,debug一下
在singletonObjects中,我们发现了我们自己写的Listener,有这个,其他的肯定也有,就不在找了,我们通过RegistrationBean就可以注入原生的Web组件,并且交由springboot进行管理
总结
没啥好说的,对于上面的两种注入原生Web组件的方式,建议使用RegistrationBean的方式进行注入
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140220.html