Spring、SpringMVC、SpringBoot等主流开发框架总结

一、Spring

  • Spring是一个轻量级的、非侵入式的框架
  • Spring是一个开源免费的框架、容器
  • Spring的核心思想是控制反转(IOC)思想和面向切面(AOP)思想

1、IOC和DI

IOC:控制反转,也就是控制权的转移,这里的控制权指的是创建对象的控制权。在以往的编程当中,对象往往是由我们自己创建并使用的。但自己创建对象不但繁琐,还会导致代码的耦合性变得很高。

所以,为了提高编程的效率和降低代码的耦合性。我们从自己创建对象改变为让程序(Spring容器)来创建对象,这种思想就是IOC(控制反转)思想。

DI:依赖注入,可以理解为实现IOC思想的方法,当我们利用控制反转的思想,让Spring容器来帮我们创建对象,那么Spring容器是如何创建我们想要的对象的?

利用依赖注入,将自己需要用到的类交给Spring容器进行管理。在需要的时候,直接向Spring容器索取,而不需要自己去定义。

这就好比租房子,以前租房子需要挨个挨个找房东,非常麻烦。现在有了中介,租房子直接联系中介,就可以租到所有的房子了。这里的中介就相当于Spring容器。

依赖注入的常用方式:

1、set方法注入

2、构造方法注入

2、Sping配置详解

2.1、元素属性
  • bean元素:使用该元素描述需要spring容器管理对象
  • name属性:给被管理的对象起个名字,获得对象时getBean(“name值”),当name和id都没有定义的时候,默认的name是是全类名,可以使用getBean方法来返回该实例
  • class属性:被管理对象的完整类名
  • id属性:与name属性一模一样,名称不可重复,不能使用特殊字符
  • scope属性:
  • singleton:默认值,该对象在Spring容器当中只能存在一个(单列)
  • prototype :多例原型,该对象每次在获得才会被创建,每次创建都是新的对象
  • request:Web环境下,对象与request生命周期一致
  • session:Web环境下,对象与session生命周期一致
2.2、Spring创建对象

1、调用构造函数

<bean id="date" class="java.util.Date"></bean>

2、调用静态方法创建

<bean id="cal" class="java.util.Calendar" factory-method="getInstance"></bean>

3、调用容器当中的其他bean的方法创建,需要利用两个bean

<!--
    factory-bean = "cal ",factory-bean指定调用容器中的其他bean的名字
    factory-method = "getTime" ,factory-method属性,用于指定需要调用的bean的方法的名字
-->
    <bean id="date1" class="java.util.Date" factory-bean="cal" factory-method="getTime"></bean>
2.3、Sping注入方式

1、set方式注入

<bean id="person1" class="org.example.entity.Person">
        <property name="name" value="tom"></property>
        <property name="phone" ref="phone"></property>
        <property name="age" value="19"></property>
  </bean>

2、构造方法注入

<bean id="student" class="org.example.entity.Student">
        <constructor-arg index="0" value="tom"></constructor-arg>
        <constructor-arg index="1" value="数据班"></constructor-arg>
        <constructor-arg index="2" ref="teacher"></constructor-arg>
        <constructor-arg index="3" ref="cat"></constructor-arg>
    </bean>

3、使用注解方式代替配置文件

1.在.xml文件当中书写指定扫描注解

<context:component-scan base-package="com.hqyj.controller"></context:component-scan>

2.在类中写注解

@Service sercice层

@Controller web层

@Repository dao层

@AutoWired @Resource

4、面向切面编程(AOP)

AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面,是Spring的核心思想之一。

AOP 的本质是由 AOP 的本质是修改业务组件的多个方法的源代码,其最大的特点是在不修改源代码的前提下,为系统当中的业务组件添加新的功能。减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

AOP的两种代理模式:

静态AOP: AOP 框架在编译阶段对程序源代码进行修改,生成了静态的 AOP 代理类

动态AOP: AOP 框架在运行阶段对动态生成代理对象

二、SpringMVC

MVC是一种设计模式,而SpringMVC是一种使用了MVC架构模式的思想,的请求驱动类型的框架。它基于java,实现了Web MVC设计模式,能够帮助我们简化开发。所以,springMVC是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是Struts2加上sring的整合。

MVC的原理图:

python类似spring的组件 spring类似的框架_spring boot

分析:

  • M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity)
  • V-View 视图(做界面的展示 jsp,html……)
  • C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面)

SpringMVC的原理图:

python类似spring的组件 spring类似的框架_spring boot_02

SpringMVC的组件:
  • 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。
  • 处理器映射器(HandlerMapping):根据URL去查找处理器
  • 处理器(Handler):(需要程序员去写代码处理逻辑的)处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,
  • 类比笔记本的适配器(适配器模式的应用)
  • 视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面
SpringMVC的请求步骤解析:

第一步:用户发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配

置或者注解进行查找

第三步:找到以后处理器映射器(HandlerMappering)像前端控制器返回执行链

(HandlerExecutionChain)

第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器

(Handler)

第五步:处理器适配器去执行Handler

第六步:Handler执行完给处理器适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析

第九步:视图解析器像前端控制器返回View

第十步:前端控制器对视图进行渲染

第十一步:前端控制器向用户响应结果

SpringMVC的常用注解
  • @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
  • @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
  • @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

三、SpringBoot

Spring Boot 的优点:

一、独立运行

Spring Boot而且内嵌了各种servlet容器,Tomcat、Jetty等,现在不再需要打成war包部署到容器中,Spring Boot只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个jar包内。

二、简化配置

spring-boot-starter-web启动器自动依赖其他组件,简少了maven的配置。

三、自动配置

Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starter-web启动器就能拥有web的功能,无需其他配置。

四、无代码生成和XML配置

Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。

五、应用监控

Spring Boot提供一系列端点可以监控服务及应用,做健康检测。

spring boot 项目创建

  • springboot项目是spring 官方推出的替代springmvc的一种项目结构。简化web编程。
  • 创建springboot的子项目
  • 项目集成tomcat
  • 目录结构不一样
  • 运行方式不一样
  • 导入的依赖包不一样
  • 配置不一样(application.properties)
  • 推荐使用ajax的方式访问请求
常用注解:

@SpringBootApplication :用来声明当前类是一个配置类

@EnableAutoConfiguration: 是springboot实现自动化配置的核心注解,通过这个注解把spring应用所需的bean注入容器中

@ComponentScan: 用来自动扫描注解标识的类,生成ioc容器里的bean,默认扫描范围是@ComponentScan注解所在配置类包及子包的类

@ResponseBody :作用在方法上或类上,让该方法的返回结果直接写入 HTTP response body 中,不会经过视图解析器,返回数据直接在页面展示。

@RestController: 是@Controller和@ResponseBody的结合体,作用于类,作用等于在类上面添加了@ResponseBody和@Controller

@Autowired: 默认按类型装配,常用于业务层实现类和持久层实现类

@Configuration: 作用于类之上,配置spring容器(应用上下文),相当于把该类作为spring的xml配置文件中

@RequestParam: 主要用于接收url?后面的参数,get或post请求,只要后面的url?有参数都可以获取到对应的参数

@RequestBody: 该注解用于获取请求体数据(body),get没有请求体,故而一般用于post请求