首页 > 其他分享 >Spring工作流程

Spring工作流程

时间:2024-11-20 22:43:59浏览次数:3  
标签:SpringMVC Spring 流程 工作 bean save class 加载

(3)案例工作流程

  • 启动服务器初始化过程
    • 1.服务器启动,执行ServletContainersInitConfig类,初始化web容器功能类似于以前的web.xml

    • 2.执行createServletApplicationContext方法,创建了WebApplicationContext对象 该方法加载SpringMVC的配置类SpringMvcConfig来初始化SpringMVC的容器

    • 3.加载SpringMvcConfig配置类

    • 4.执行@ComponentScan加载对应的bean 扫描指定包及其子包下所有类上的注解,如Controller类上的@Controller注解

    • 5.加载UserController,每个@RequestMapping的名称对应一个具体的方法此时就建立 /save 和 save方法的对应关系

    • 6.执行getServletMappings方法,设定SpringMVC拦截请求的路径规则/代表所拦截请求的路径规则,只有被拦截后才能交给SpringMVC来处理请求

  • 单次请求过程
    • 1.发送请求 http://localhost/save

    • 2.web容器发现该请求满足SpringMVC拦截规则,将请求交给SpringMVC处理

    • 3.解析请求路径/save

    • 4.由/save匹配执行对应的方法save()

    • 5.上面的第五步已经将请求路径和方法建立了对应关系,通过/save就能找到对应的save方法执行save()

    • 6.检测到有@ResponseBody直接将save()方法的返回值作为响应体返回给请求方

(4)bean加载控制

  • Spring容器加载的bean和SpringMVC所加载的bean应该单独进行管理,否则spring也能对SpringMVC的bean进行管理

  • Spring容器所管理的bean
    • 业务bean(service)

    • 功能bean (DataSource,SqlSessionFactoryBean,MapperScannerConfigurer等)

  • SpringMVC所管理的bean
    • 加载其相关bean(表现层bean),也就是controller包下的控制类

  • 如何避免Spring加载到SpringMVC的bean
    • 1.将Spring和SpringMVC的配置类包扫描的路径设定为一个精确的包,如service、dao等

    @Configuration
    @ComponentScan({"com.presentationLayer.controller"})
    public class SpringMVCConfig{...}
    ​
    @Configuration
    @ComponentScan({"com.presentationLayer.dao","com.presentationLayer.service"})
    @PropertySource("jdbc.properties")
    @Import({JdbcConfig.class, MybatisConfig.class})
    public class SpringConfig {...}
    • 2.在Spring配置类包扫描一个目录下的所有包的同时排除SpringMVC管理的bean所在的包,这里需要满足一个前提条件==》SpringMVCConfig的配置类中不能将扫描controller,否则排除无法生效,这是由于 SpringMvcConfig 上有一个@Configuration注解,也会被Spring扫描到 SpringMvcConfig上又有一个@ComponentScan,把controller类又给扫描进来了

    @ComponentScan(value = {"com.presentationLayer"}, excludeFilters =                                      @ComponentScan.Filter(type = FilterType.ANNOTATION,
                        classes = Controller.class))
    • 3.excludeFilters属性:设置扫描加载bean时,排除的过滤规则

      • type属性:设置排除规则,当前使用按照bean定义时的注解类型进行排除

        • ANNOTATION:按照注解排除

        • ASSIGNABLE_TYPE:按照指定的类型过滤

        • ASPECTJ:按照Aspectj表达式排除,基本上不会用

        • REGEX:按照正则表达式排除

        • CUSTOM:按照自定义规则排除

      • classes属性:设置排除的具体注解类,当前设置排除@Controller定义的bean

  • 在tomcat服务器启动将Spring的配置类加载,我们需要修改 ServletContainersInitConfig
//加载spring配置类
protected WebApplicationContext createRootApplicationContext() {
    AnnotationConfigWebApplicationContext ctx = new                                                                             AnnotationConfigWebApplicationContext();
    ctx.register(SpringConfig.class);
    return ctx;
}
  • 对于web容器上述的配置方式,Spring还提供了一种更简单的配置方式,可以不用再去创建 AnnotationConfigWebApplicationContext 对象,不用手动 register 对应的配置类
public class ServletContainerInitConfig extends                                                     AbstractAnnotationConfigDispatcherServletInitializer{
​
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
​
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }
​
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

标签:SpringMVC,Spring,流程,工作,bean,save,class,加载
From: https://blog.csdn.net/weixin_63655614/article/details/143926477

相关文章

  • Spring之OCP开闭原则和DIP依赖倒置原则
    通过如下代码,来分析几个开发原则(OCP开闭原则和DIP依赖倒置原则)代码结构1.Test类packagecom.xu.spring6.client;importcom.xu.spring6.web.UserAction;publicclassTest{publicstaticvoidmain(String[]args){UserActionuserAction=newUserActio......
  • 基于Java+Springboot+Jpa+Mysql实现的在线网盘文件分享系统功能设计与实现三
    一、前言介绍:免费学习:猿来入此1.1项目摘要在线网盘文件分享系统的课题背景主要源于现代社会对数字化信息存储和共享需求的日益增长。随着互联网的普及和技术的快速发展,人们越来越依赖电子设备来存储和传输各种类型的数据文件。然而,传统的本地存储方式存在诸多不便,如空间有限、......
  • Spring中使用BeanUtils.copyProperties()导致Hessian/Burlap:ClassNotFoundException
    背景遇到一个问题:dubbo服务客户端发现提示警告异常[NewI/Oworker#4]WARNc.a.c.c.hessian.io.SerializerFactory-Hessian/Burlap:'XX.XX.XBean'isanunknownclassinjava.net.URLClassLoader@988246e:java.lang.ClassNotFoundException:XX.XX.XBean但是根据代码......
  • SpringBoot在线网盘管理系统
    感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人2025最新毕业设计项目推荐-SSM篇2025最新毕业设计项目推荐-SpringBoot篇2025最新毕业设计项目推荐-小程序、uniapp篇-CSDN博客Java精品毕设实战案例推荐​在......
  • SpringBoot+小程序旅游景区管理系统
    感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人2025最新毕业设计项目推荐-SSM篇2025最新毕业设计项目推荐-SpringBoot篇2025最新毕业设计项目推荐-小程序、uniapp篇-CSDN博客Java精品毕设实战案例推荐​小......
  • SpringBoot+小程序的考研分享交流社区
    感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人2025最新毕业设计项目推荐-SSM篇2025最新毕业设计项目推荐-SpringBoot篇2025最新毕业设计项目推荐-小程序、uniapp篇-CSDN博客Java精品毕设实战案例推荐​小......
  • SpringBoot项目框架搭建日志相关容易被忽视的细节
    问题项目A、B,都基于SpringBoot技术栈开发。发现其中项目A在本地IDE启动时控制台会打印spring-webmvc里@Controller的mapping映射信息,其中一行如下:2024-11-2021:10:12[main:76835]-[INFO]org.springframework.web.servlet.handler.AbstractHandlerMethodMapping$Mappi......
  • 基于java+springboot的hive的安顺旅游景点数据分析的设计与实现
    课题简介基于Java+SpringBoot和Hive的安顺旅游景点数据分析系统,全力挖掘安顺旅游数据宝藏。后端借SpringBoot构建,SpringDataJPA与MySQL存储关键信息,SpringSecurity筑牢安全防线。Hive存储海量景点数据,如客流、客源地、消费等,HiveQL深度分析挖掘价值。......
  • 基于java+springboot的Hadoop的豆瓣电子图书推荐系统
    课题简介基于Java+SpringBoot和Hadoop的豆瓣电子图书推荐系统,致力于为读者精准推送契合其兴趣的电子图书。后端运用SpringBoot构建稳固架构,SpringDataJPA与MySQL数据库协作存储图书信息、用户数据、评分记录等内容,SpringSecurity保障系统安全,规范用户认......
  • 基于springboot+vue的Java的航空飞机票务预约购票出行服务系统设计与实现(源码+文档+
    课题简介基于SpringBoot+Vue的航空飞机票务预约购票出行服务系统,为旅客提供一站式航空出行解决方案。后端采用SpringBoot构建核心服务,SpringDataJPA与MySQL数据库交互,存储航班信息、用户数据、订单详情等,SpringSecurity确保系统安全,进行严格的用户认证与......