描述
- 轻量级的控制反转和面向切面的容器框架
- 轻量级:如果一个框架没有侵入性,就说该框架是轻量级的。
- 侵入性:如果使用一个框架,必须实现框架提供的接口,或者继承框架提供的类,那么就说这个框架具有侵入性。
- IOC:控制反转,将对象的创建过程交给Spring容器,由容器管理对象的生命周期;
- AOP:面向切面编程,将核心业务功能与周边功能分离,周边功能如记录日志,创建记录日志的代理方法,需要该功能时调用代理方法即可;
- Spring MVC:基于MVC设计模式的Web框架。
特点 | 描述 |
---|
方便解耦,简化开发 | 通过IOC容器将对象之间的依赖关系交由Spring进行控制 |
集成各种优秀的框架 | MyBatis、MVC等 |
aop编程的支持 | |
声明式事务的支持 | |
测试方便 | 对JUnit4支持,方便测试Spring程序 |
降低API的使用难度 | 通过Spring的简易封装实现,如JDBC、远程调用等 |
体系结构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ddf26b828e3d8207317d91be44a85c5a.png)
<1> 核心容器
模块 | 描述 |
---|
spring-core | 提供了框架的基本组成部分,包括控制反转和依赖注入功能 |
spring-beans | 提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean |
spring-expression | 提供了表达式语言,用于在运行时查询和操作对象 |
spring-context | 上下文,即IoC容器,它扩展了BeanFactory,为它添加了Bean生命周期管理、框架事件体系等功能 |
<2> AOP和Instrument
模块 | 描述 |
---|
spring-aop | 面向切面编程;在某一个类或方法执行前后做标记,声明在执行到这之前或之后要先执行什么操作 |
spring-aspects | 集成AspectJ, 主要是为Spring AOOP提供多种AOP实现方法 |
spring-instrument | 提供一些类级的工具支持和ClassLoader级的实现,用于服务器 |
<3> 数据访问/集成
模块 | 描述 |
---|
spring-jdbc | 对jdbc的支持 |
spring-tx | 支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理 |
spring-orm | 对象关系映射,提供集成层,包括JPA和Hibernate |
spring-oxm | 对象xml映射 |
spring-jms | java消息服务,包含用于生产和使用消息的功能 |
<4> Web
模块 | 描述 |
---|
spring-web | 提供最基础的web支持,主要建立在核心容器上,通过Servlet或者Listener来初始化IOC容器,也包括一些与Web相关的支持。 |
spring-webmvc | 实现了Spring MVC的Web应用 |
spring-websocket | 提供了客户端和服务器端之间通信的两种方式 |
spring-webflux | 一个新的非阻塞式Reactive Web框架,可以用来建立异步、非阻塞、事件驱动的服务,扩展性好 |
<5> 其他
模块 | 描述 |
---|
Spring-test | 支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试 |
spring-messaging | 提供了对消息传递体系结构和协议的支持 |
事务管理
- 对一系列数据库操作进行管理(统一的提交或回滚操作),若过程中有一处操作失败则回滚之前所有操作
- 编程式事务管理:通过编程的方式管理事务,灵活性大,但是极难维护
- 声明式事务管理:将事务管理和业务分离,通过注解或XML配置来管理事务
SpringMVC工作流程
- 用户发送请求给前端控制器DispatcherServlet,前端控制器调用处理器映射器HandlerMapping;
- 处理器映射器找到具体处理器,生成处理器对象返回给前端控制器;
- 前端控制器调用处理器适配器HandlerAdapter,处理器适配器调用具体处理器Handler(或Controller,也叫后端控制器);
- 处理器执行完返回ModelAndView给处理器适配器,处理器适配器再将其返回给前端控制器;
- 前端控制器将ModelAndView传给视图解析器ViewReslover解析,解析后返回视图View;
- 前端控制器对View渲染视图(即将模型数据填充至视图中),后响应给用户。
Spring配置文件内容
- 开启注解功能,并配置扫描包
- 开启事务注解驱动
- 事务管理器
- 配置数据源
- 配置SQL会话工厂,别名,映射文件
Spring 注解
- @Service:类使用时表示自动注册到spring容器
- @Resource:实现依赖注入,自动装配(默认byName)
- @Controller:标识一个类为控制器
- @RestController:相当于@ResponseBody + @Controller,标识一个类为控制器,且方法返回值默认转为json格式
- @ResponseBody:将方法返回值转换成json格式
- @ResquestMapping:用于类与方法上,表示处理请求地址映射
注解原理
- 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。通过反射获取注解时,返回的是Java运行时生成的动态代理对象。
- 通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。
其他
<1>在拦截请求中,拦截get方式提交的方法时怎样配置?
- 在注解@ResquestMapping里面加上method=RequestMethod.GET。
<2>如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
- 在方法中申明这个对象,SpringMVC会自动把属性赋值到这个对象里面。
<3>SpringMVC中函数的返回值是什么?
- 有String, ModelAndView等,一般用String。
<4>SpringMvc用什么对象从后台向前台传递数据的?
- 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以通过el表达式拿到。