首页 > 其他分享 >DispatcherServlet 是一个 Servlet 也是一个bean

DispatcherServlet 是一个 Servlet 也是一个bean

时间:2023-04-13 16:45:13浏览次数:35  
标签:容器 初始化 Spring Bean bean DispatcherServlet Servlet

Servlet

  • DispatcherServlet实现了javax.servlet.Servlet接口,负责处理来自客户端浏览器的HTTP请求,并将请求分发给相应的Controller进行处理。
  • DispatcherServlet通常是Web应用程序中唯一一个Servlet,并且是Spring MVC框架中最核心的组件之一。
  • Spring Boot启动时会初始化Tomcat容器,并创建WebApplicationContext对象也就是DispatcherServlet容器

Bean

  • DispatcherServlet同样是Spring IoC容器中的一个对象,通常情况下需要在Spring配置文件中进行相应的声明和配置。
  • DispatcherServlet作为一个Bean,可以享受Spring IoC容器提供的各种功能和服务,包括依赖注入、Bean生命周期管理等。
  • DispatcherServlet会在应用启动时被自动装配(即初始化),并负责管理整个Web请求和响应流程
  • Spring Boot启动时,Spring容器也会随之初始化,并创建ApplicationContext对象也就是spring容器

初始化流程 。Tomcat容器和Spring容器可以共同持有Spring MVC容器,彼此独立且依赖注入

  1. Spring Boot启动时会初始化Tomcat容器,并创建WebApplicationContext对象。
  2. Tomcat容器会注册一个DispatcherServlet,这个Servlet会使用WebApplicationContext对象来管理Spring MVC容器中的Bean实例。
  3. 在Spring Boot启动时,Spring容器也会随之初始化,并创建ApplicationContext对象。这个容器负责管理所有非Web相关的Bean实例。
  4. 通过在@Configuration类中添加@EnableWebMvc注解,我们可以扩展Spring MVC容器的功能,如添加拦截器、自定义消息转换器等。
  5. 在@Configuration类中定义各种业务逻辑组件、服务、数据访问对象等,并通过在类上添加@Service、@Repository、@Component等注解,将它们注册到Spring容器中。
  6. 在需要使用Spring MVC、Tomcat以及Spring容器中的Bean实例的地方,我们可以使用@Autowired注解进行依赖注入,从而实现模块化开发和松耦合。

springmvc 管理的bean 默认单例

  • @Controller、
  • @ViewResolver、
  • @HandlerMapping

spring管理的bean 默认单例

  • @Service、
  • @Repository、
  • @Componenting
默认单例并发模式引发冲突
  • 其实在多线程模式下如果多个线程同时访问同一个实例确实会引发冲突

springboot 处理方式

  • Spring IoC容器默认会对所有Bean进行线程安全处理。
  • 使用全局变量时候使用 synchronized、Lock、Atomic类、ConcurrentHashMap等进行保护。
  • 针对不同的注解组件 springboot采用了AOP代理技术来对Bean进行封装,每次调用@Service、@Controller、@Component等注解的Bean都会通过代理产生一个新的实例,从而避免不同线程之间的互相干扰

标签:容器,初始化,Spring,Bean,bean,DispatcherServlet,Servlet
From: https://www.cnblogs.com/guanchaoguo/p/17315221.html

相关文章

  • No qualifying bean of type ‘org.springframework.transaction.PlatformTransaction
    今天在ssm项目中遇到一个问题Noqualifyingbeanoftype'org.springframework.transaction.PlatformTransactionManager'available:expectedsinglematchingbeanbutfound2:这个问题产生的原因在于项目中配置了多个数据源,而代码中启用了事务@Transactional注解,导致事......
  • JAVA返回前端时候bean转json时首字母、第二个字母大写会自动变成小写的问题
      后台bean是privateStringuName;但是前端生成的json是uname会自动变成小写 如果我们只是个别的几个的话,只需要加个注解@JsonProperty("uName")privateStringuName; 这样就可以了......
  • webServlet添加数据报错500
     新建数据库文件,之后跳转出现问题,发现是数据库问题。字符不匹配 代码里是utf-8,将字符修改为utf-8,顺序为utf8之后可以 ......
  • servlet容器,web容器,spring容器,springmvc容器的区别(转载)
     这个理解我可以通过一个http的页面请求来说明。说明 Tomcat&Jetty在启动时给每个Web应用创建一个全局的上下文环境,这个上下文就是ServletContext,其为后面的Spring容器提供宿主环境。Tomcat&Jetty在启动过程中触发容器初始化事件,Spring的ContextLoaderListener会监听到......
  • SpringBoot向web容器注入Servlet,Filter及SpringSecurity注册DelegatingFilterProxy
    从SpringSecurity架构图可知SpringSecurity的过滤器与Web容器的过滤器是通过DelegatingFilterProxy接入的。由DelegatingFilterProxy代理了FilterChainProxy,FilterChainProxy包含了SpringSecurity的过滤器链。 那么DelegatingFilterProxy是怎么创建及如何加入到Web容器中? 看......
  • JavaWeb之Servlet详解(以及浏览器调用 Servlet 流程分析图)
    Servlet1.什么是ServletServlet(java服务器小程序)他是由服务器端调用和执行的(一句话:是Tomcat解析和执行)他是用java语言编写的,本质就是Java类他是按照Servlet规范开发的(除了tomcat->Servletweblogic->Servlet)功能强大,可以完成几乎所有的网站功能2.开发......
  • JavaWeb中Servlet、web应用和web站点的路径细节("/"究竟代表着什么)
    JavaWeb中Servlet、web应用和web站点的路径细节("/"究竟代表着什么) 1开门见山新建一个tomcatweb项目,配置tomcat的虚拟目录,取默认值(/项目名_war_exploded)那么如果你的tomcat的默认站点(即http://localhost:8080)没有更改的话,这个项目的两个重要的根目录就出来了web站点根目......
  • javaweb-学习创建servlet
    Servlet创建、声明、映射,利⽤ServletContext统计⼀个⽹站的访问总量。1)、创建一个servelet选择要用到的方法2)、编辑serveletpackagecom.cont;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletContext;importjavax.servlet.Ser......
  • SpringBoot启动后获取特定注解的Bean实例代码(转)
    来自:https://zhuanlan.zhihu.com/p/375973197本文研究的主要是Spring启动后获取所有拥有特定注解的Bean,具体如下。最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationContext中......
  • JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
    一、什么是BeanShell?BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,JMeter性能测试工具也充分接纳了BeanShell解释器,封装成了可配置的BeanShell前置和后置处理器,分别是BeanShellPreprocessor(BeanShell预处理程序)和BeanShellPostprocessor......