一.
1.SSM框架是spring、spring MVC 、和mybatis框架的整合,是标准的MVC模式。标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层。使用spring实现业务对象管理,使用spring MVC负责请求的转发和视图管理,mybatis作为数据对象的持久化引擎。
1)持久层:dao层(mapper)层
作用:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此。
Dao层首先设计的是接口,然后再Spring的配置文件中定义接口的实现类。
然后可以在模块中进行接口的调用来进行数据业务的处理。(不在关心接口的实现类是哪个类)
数据源的配置以及有关数据库连接的参数都在Spring的配置文件中进行配置。
2)业务层:Service层
作用:Service层主要负责业务模块的逻辑应用设计。
先设计接口然后再设计实类,然后再在Spring的配置文件中配置其实现的关联。(业务逻辑层的实现具体要调用到自己已经定义好的Dao的接口上)这样就可以在应用中调用Service接口来进行业务处理。
建立好Dao之后再建立service层,service层又要在controller层之下,因为既要调用Dao层的接口又要提供接口给controller层。每个模型都有一个service接口,每个接口分别封装各自的业务处理的方法。
3)表现层:Controller层(Handler层)
作用:负责具体的业务模块流程的控制。
配置也同样是在Spring的配置文件里面进行,
调用Service层提供的接口来控制业务流程。
业务流程的不同会有不同的控制器,在具体的开发中可以将我们的流程进行抽象的归纳,设计出可以重复利用的子单元流程模块。
4)View层
作用:主要和控制层紧密结合,主要负责前台jsp页面的表示。
各层之间的联系
这里是引用
DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势,Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
1.Spring
Spring里面的IOC容器和AOP是我们平时使用最多的。
1)IOC(控制反转)
它可以装载bean,也是一种降低对象之间耦合关系的设计思想。(比如租房子。以前租房子需要一个房子一个房子找,费时费力,然后现在加入一个房屋中介,把你需要的房型告诉中介,就可以直接选到需要的房子,中介就相当于spring容器。)
2)AOP(面向切面)
是面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的需求,如:动态的增加日志、安全或异常处理等。AOP使业务逻辑各部分间的耦合度降低,提高程序可重用性,提高开发效率。
1.横切关注点:从每个方法中抽取出来的同一类非核心业务代码。
2.切面:封装横切信息点的类,每个关注点体现为一个通知方法。
3.通知:切面必须要完成的各个具体工作,也就是切面里的一个个方法。
4.目标:被通知的对象,也就是被通知方法所作用的对象。
5.代理:像目标对象应用通知之后所创建的代理对象。
6.连接点:横切关注点在程序代码中的具体体现,对应用程序执行的某个特定位置。(通俗来讲就是一个个的方法)
7.切入点:切入点就是定位连接点的方式。每个通知上的切入点表达式找到对应的连接点,执行通知之后连接点也就变成了切入点。
2.Spring MVC
1) 用户发送请求至前端控制器DispatcherServlet。
2) DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3) 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。
3.Mybati(核心)
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
二.
SpringBoot是基于 Spring 开发的一种轻量级的全新框架,不仅继承了 Spring 框架原有的优秀特性,而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。通过 Spring Boot,可以轻松地创建独立的,基于生产级别的基于 Spring 的应用程序。SpringBoot 也常被成为微框架。
特点:
-
可以创建独立的 Spring 应用程序,并且基于其 Maven 或 Gradle 插件,可以创建可执行的 JARs 和 WARs。
-
内嵌 Tomcat 或 Jetty 等 Servlet 容器。
3.提供自动配置的“starter”项目对象模型(POMS)以简化 Maven 配置。
4.尽可能自动配置 Spring 容器。
5.提供准备好的特性,如指标、健康检查和外部化配置。
6.绝对没有代码生成,不需要 XML 配置。
「最主要的还是减少了大量的XML配置,总的来说就是一句话,用SpringBoot框架开发项目,可以轻松地创建独立的,基于生产级别的基于Spring的应用程序」
三.1、SpringBoot生命周期
SpringBoot应用的生命周期,整体上可以分为SpringApplication初始化阶段、SpringApplication运行阶段、SpringApplication结束阶段、SpringBoot应用退出四个阶段。
1.1、SpringApplication初始化阶段
SpringApplication初始化阶段可以分为SpringApplication构造阶段和SpringApplication配置阶段。初始化阶段以发布ApplicationStartingEvent事件为止。
SpringApplication构造阶段
通过SpringApplication构造方法或SpringApplicationBuilder构建SpringApplication对象的过程可以归纳为构造阶段。
SpringApplication配置阶段
SpringApplication对象创建之后,调用set或相关属性设置方法的操作可以归纳为配置阶段。
1.2、SpringApplication运行阶段
SpringApplication运行阶段又可以划分为SpringApplication准备阶段、ApplicationContext启动阶段(refreshContext)、ApplicationContext启动后阶段,以发布ApplicationStartedEvent事件为止。
SpringApplication准备阶段
从运行SpringApplication#run方法(发布ApplicationStartingEvent事件后)到SpringApplication#prepareContext方法(含)属于SpringApplication准备阶段。以发布ApplicationPreparedEvent事件为止。
ApplicationContext启动阶段
SpringApplication#refreshContext方法属于ApplicationContext启动阶段,以发布ContextRefreshedEvent事件为止。
ApplicationContext启动后阶段
从SpringApplication#afterRefresh到发布ApplicationStartedEvent事件为止。
1.3、SpringApplication结束阶段
从发布ApplicationStartedEvent事件(不含)开始到发布发布ApplicationReadyEvent事件或ApplicationFailedEvent为止。
1.4、SpringBoot应用退出阶段
从关闭应用上下文到调用SpringApplication#exit或SpringApplication#handlerFailure或抛出异常错误为止。
四.一、SSM优缺点应该分开来说的,比如
1)spring 不说了,核心ioc、aop技术,ioc解耦,使得代码复用,可维护性大幅度提升,aop提供切面编程,同样的增强了生产力。
2)spring mvc嘛,是对比struts2等mvc框架来说的,不说struts2爆出的那么多安全漏洞,而且是类拦截,所有Action变量共享,同时是filter入口的,而spring mvc是方法拦截,controller独享request response数据,采用的serlvet入口,与spring无缝对接。开发而言,spring mvc更加轻量和低入门。
3)mybatis嘛,看业务场景,主要是mybatis的sql可以由开发者去掌控和调优,相对hibernate等orm框架来说,更加直观。在业务场景比较复杂,sql好多联合关联的情况下,mybatis谁用谁知道。当然缺点就是对sql不熟悉的开发者就不太友好了。
二、 SSM框架和spring boot全家桶相比有哪些优缺点?这两者对比起来有点奇怪。因为SSM是WEB应用框架,涵盖整个应用层,而spring boot你可以看做一个启动、配置、快速开发的辅助框架,本身针对的是微服务。springboot 只是为了提高开发效率,是为了提升生产力的:
1、springboot一个应用是一个可执行jar(启动类main方法启动web应用),而不像传统的war,内嵌tomcat容器,可以jar形式启动一个服务,可以快速部署发布web服务,微服务最好不过了。
2、将原有的xml配置,简化为java配置
3、当然结构可能跟一般的ssm有一定区别,但其实主要是在资源文件。
Spring Boot 默认“约定”从资源目录的这些子目录读取静态资源:
-
src/main/resources/META-INF/resources
-
src/main/resources/static (推荐)
-
src/main/resources/public
总结
“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)
SpringBoot帮助开发者快速启动一个Web容器;
SpringBoot继承了原有Spring框架的优秀基因;
SpringBoot简化了使用Spring的过程。
拓展谈SpringBoot之前,先说一下传统的SSM开发,使用过SSM开发的人都会发现,传统的SSM框架项目会有大量的配置文件,需要手动的区整合三个框架,也就是SpringMVC、Spring、MyBatis,并且需要注意各种配置和兼容,后期的维护难度也很大。
现在快速开发的一个网站的方式层出不穷,像Node.js,PHP。脚本语言也越来越流行,比如Python,Scala,Ruby等,这时候Spring的开发模型就显得相对笨重了。在这种情况下,由Pivotal团队开发了一个工具集,叫SpringBoot。其实本质还是Spring Framework。底层代码也还是Springmvc和Spring的整合。不过不需要手动的区配置,只需要导入相应的依赖,SpringBoot会自动配置。
SpringBoot帮我们做什么什么事情呢? 1、SpringBoot使用了特定的配置方式,开发人员不需要再定义样板化的配置,简化项目的初始构建。 2、SpringBoot提供了更多的组合式注解,简化开发过程。 3、SpringBoot可以"零配置"整合很多第三方工具。 4、SpringBoot提供了内置的容器,部署也变得异常简单。 5、SpringBoot应对监控也提供了相应的方案。
SpringBoot和SSM不冲突,SpringBoot只是简化了配置,实际开发 没什么区别。SSM就好像开手动挡的汽车,需要踩离合,挂档,给油车才能开动。而SpringBoot就好像自动挡的汽车,给油就走,踩刹车就停。
在开发中的区别还是存在的,虽然SpringBoot简化了配置,但并不代表不需要编写配置文件,还是需要在自带的application.yml文件中去编写一些内容。只不过编写的方式变得简单了,虽然简单了,但是和SSM整合的方式还有些区别。
在使用SSM开发的时候,多数会选择Jsp作为视图,但是SpringBoot不推荐使用Jsp,主推的是thymeleaf和freemarker等模板引擎,也造成了使用SSM开发到SpringBoot开发也需要一定得学习成本。不过如果掌握了SSM的话,学习SpringBoot也是水到渠成,异常的简单。
更推荐使用SpringBoot开发,一是SpringBoot工具集的简化配置等操作,可以让程序员把精力主要放在代码的业务逻辑上,二是想学习Springcloud微服务组件的话,SpringBoot是基础。
五.
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
|