浅谈ssm框架之理解
spring web
spring web是spring框架中用于处理web请求的一个模块,此模块基于MVC设计思想做了具体的落地实现。它底层封装了对Servlet的技术的应用,建华路程序员对请求和响应过程中数据的处理。
核心组件:
- DispatcherServlet:前端控制器
- HandlerMapping:映射器对象,用于管理URL与对应controller的对应映射关系
- Interceptors:拦截器,实现请求响应的共性处理
- Controller:后端控制器-handler,负责处理请求的控制逻辑
-
ViewResolver:视图解析器,解析对应的视图关系(前缀+viewname+后缀)
当我们在浏览器输入一个URL访问服务端资源时,在spring web模块应用中,其请求处理流程如下:
- 基于域名获取IP地址(例如:127.0.0.1)
- 基于IP地址找到网络中计算机(IP地址时网络中计算机的唯一标识)
- 基于端口找到Tomcat服务(port是计算机应用的唯一标识)
- Tomcat服务会基于thread并借助io读取网络http协议中请求数据
- Tomcat内部会创建请求(request)和响应(response)对象,用于封装请求和响应信息
- Tomcat会调用Filter对象request数据进行过滤
- Filter对request过滤之后,会将请求交给 DispatchServlet(分发器) 进行处理
- DispatchServlet 读取请求中的URL,并基于URL从requestMapping中找到对应的handler以及方法
- DispatchServlet 基于反射技术调用handler方法
- DispatchServlet 会将handler方法返回的view等相关信息进行封装,然后交给视图解析器进行解析
- ViewResolver 视图解析器为 view name添加前缀,后缀,并将model中数据填充到view中
- DispatchServlet 将视图解析器解析的结果封装到response对象,并将其响应到客户端。
spring
spring是一个开源的轻量级 JavaBean 容器框架。使用 JavaBean 代替 EJB ,并提供了丰富的企业应用功能,降低应用开发的复杂性。
- 轻量:非入侵性的、所依赖的东西少、资源占用少、部署简单,不同功能选择不同的 jar 组合
- 容器:工厂模式实现对 JavaBean 进行管理,通过控制反转(IOC)将应用程序的配置和依赖性与应用代码分开
- 松耦合:通过 xml 配置或注解即可完成 bean 的依赖注入
- AOP:通过 xml 配置 或注解即可加入面向切面编程的能力,完成切面功能,如:日志,事务…的统一处理
- 方便集成:通过配置和简单的对象注入即可集成其他框架,如 Mybatis、Hibernate、Shiro…
- 丰富的功能:JDBC 层抽象、事务管理、MVC、Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、Web Service…
两大核心框架:IOC 和 DI
-
IoC(Inversion of Cotroller)
简单来说就是对象object的创建的权利及对象的生命周期的管理过程中交由spring框架处理,从此在开发过程中不在需要关注对象的创建和生命周期的管理,而是在需要的时候由spring框架提供,这个由spring管理对象的创建和生命周期的机制称之为控制反转。
在Java范畴中万物皆对象,在spring中万物皆Bean。bean是spring的核心、基础,根源。springIoC控制反转底层实现利用率java自身提供的反射技术来创建对象。getBean参数是一个字符串,通过这个字符串,找到xml中的标签,通过bean标签的class属性拿到类全路径。
Class.forName(classPath).newInstance();
通过这种方式,spring控制了对象的生命周期,可以随时自行增强对象,如DI依赖注入,如Aop,环绕通知在类创建前后增强功能,如Transaction事务加强等。
- DI(Dependency Injection)
在创建对象的过程中spring可以依据对象的关系,自动把其他对象注入(无需创建对象,直接拿着使用)进来,这个过程称之为DI。
BeanFactory利用反射实现对象的创建,DI实现对象关系管理。
SpringBoot
JAVAEE 应用体系中繁重的配置、低下的开发效率、高难度的三方集成,复杂的部署流程等等一直被开发人员所诟病。Spring 这样的轻量级的资源整合框架,在实现其相对比较多的资源整合时,依旧需要大量的手动依赖管理,复杂的 XML 配置(还经常没有提示)。
现在的软件生态应用也已经形成一定的规模,系统架构正在从单体架构,分布式架构,跨越到微服务架构。随着整个架构体系变化,企业对技术的要求也在变化,现在的企业更注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。由此由此spring boot 诞生。
Spring Boot 是 Java 软件开发框架(很多人现在把它理解为一个脚手架),其设计目的是用来简化 Spring 项目的初始搭建以及开发过程。该框架使用了特定的注解方式来进行配置,从而使开发人员不再需要大量的 xml 配置。不再需要大量的手动依赖管理Spring Boot 基于快速构建理念,通过约定大于配置,开箱即用的方式,希望能够在蓬勃发展的快速应用开发领域成为其领导者。
关键特性:
- 起步依赖
- 自动配置
- 健康检查-监控
- 嵌入式服务
Mybatis
Mybatis 是一个优秀的持久层框架
- 支持自定义SQL、存储过程以及高级映射
- 免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作
- 通过简单的XML或注解来配置和映射原始类型、接口和java POJO(Plain Old Java Objects,普通老式java对象)为数据库中记录
优点:
- 消除 JDBC 中的重复代码
- 可以在 XML 或注解中直接编写 SQL 语句,比较灵活,方便对 SQL 的优化与调整
- SQL 写在 XML 中,与代码解耦,按照对应关系方便管理
- XML 中提供了动态 SQL 的标签,方便根据条件拼接 SQL
- 提供了 XML、注解与 Java 对象的映射机制
- 与 Spring 集成比较方便
缺点:
- 字段较多、关联表多时,编写 SQL 工作量较大
- SQL 语句依赖了数据库特性,会导致程序的移植性较差,切换数据库困难