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