SpringBoot--原生组件注入

546 阅读1分钟

SpringBoot是怎么完成原生组件注入的呢?

1.使用Servlet API

@ServletComponentScan(basePackages = "com.ahsao.admin"):指定Servlet组件都放在com.ahsao.admin这个包下面,这个注解是标识在SpringBoot的Application类里面的

image.png

image.png

@WebServlet(urlPatterns = "/RegistServlet"):用于标注在一个继承了HttpServlet类之上,属于类级别的注解。 该注解的作用等价于 在web.xml中配置的该servlet的<servlet-mapping>元素中<url-pattern>的配置,比如:

    <servlet>
<!-- 类名 -->
<servlet-name>RegistServlet</servlet-name>
<!-- 所在的包 -->
<servlet-class>test.RegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistServlet</servlet-name>
<!-- 访问的网址 -->
<url-pattern>/RegistServlet</url-pattern>
</servlet-mapping>

@WebFilter(urlPatterns={"/css/","/images/"}):标注一个拦截器,拦截/css/和/images/包下的所有文件。

image.png @WebListener:监听器

image.png

2.使用RegistrationBean

ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean

image.png

ServletRegistrationBean:这个是用来使用我们自己配置的WebServlet。 FilterRegistrationBean:这个是用来使用我们自己配置的Filter。 ServletListenerRegistrationBean:这个是用来使用我们自己配置的Listener。

image.png

DispatcherServlet注入原理:

上面我们留了一个问题:为什么我们@WebServlet(urlPatterns="/RegistServlet")没有被Spring的拦截器拦截呢?

image.png

image.png

我们的DispatcheServlet经过了整个Spring流程,而拦截器是作用于Spring流程的,而我们的Servlet则是直接交给了Tomcat处理,没有经过Spring流程,而拦截器拦截必须经过Spring流程,这也就是为什么@WebServlet(urlPatterns="/RegistServlet")没有被拦截器拦截。

嵌入式Servlet容器:

image.png

image.png