JavaEE笔记(二):SpringMVC基础知识
JavaEE体系结构:
- 应用层
- Web层(框架:Struts和SpringMVC)
- 业务层(框架:Spring)
- 持久层 (框架:Hibernate和MyBatis)
MVC设计模式的任务:将包含业务数据的模块与显示模块的视图解耦
在模型和视图之间引入重定向层可以解决问题。此重定向层是控制器,控制器将接收请求,执行更新模型的操作,然后通知视图关于模型更改的消息
1. Spring两大核心思想
- IOC(控制反转)
- AOP(面向切面编程)
1.1 IOC
-
IOC是一种编程思想,用于实现模块之间的解耦
在Spring中它的作用是对对象的创建,维护和销毁等生命周期的控制
-
IOC:把对象的创建、初始化、销毁交给Spring来管理,而不是由开发者控制,实现控制反转
-
正转: 就是你需要用到这个类对象时,自己手动new出来
- 反转: 就是你设计编写好的类不是由你自己创建,而是把创建的权力交予spring框架的IOC容器
依赖注入
根据业务逻辑来看,对象经常不是独立的,一个对象的创建往往涉及另一个对象的创建,当然这个对象也要由IOC容器负责,负责的方式就是依赖注入DI,通过反射机制实现
依赖注入提倡接口编程,在项目启动的时候,spring会根据你的配置文件创建所需要的类放入IOC容器中,我们只需要通过spring规定的方式获取
依赖注入: IOC容器会把你需要的类对象和该类对象所依赖的所有类对象都创建并且注入
三种注入方式:
- 接口注入
- 构造器注入
- Setter方法注入
1.2 AOP
AOP:面向切面编程,系统中有很多各不相干的类的方法,在这众多方法中加入某种系统功能的代码,如加入日志,权限判断等,AOP可以实现横切关注点(如日志,安全,缓存和事务管理)与他们所影响的对象之间的解耦。
实现AOP 功能采用的是代理技术,调用代理类,代理类与目标类具有相同的方法声明。
AOP 在spring中主要表现在两个方面:提供声明式的事务管理 、spring支持用户自定义切面
2 Spring核心容器
-
BeanFactory
BeanFactory 就是一千管理 Bean 的工厂,它主要负责初始化各种 Bean ,并调用它们的生命周期方法
-
ApplicationContext
ApplicationContext 是 BeanFactory 的子接口,也被称为应用上下文
3. Spring 的体系结构
3.1 Core Container (核心容器)
Spring 的核心容器是其他模块建立的基础,它主要由 Beans 模块、 Core 模块 、 Conte xt 模
块 、 Context- support 模块和 SpEL ( Spring Expression Language , Spring 表达式语言)模块
组成,具体介绍如下 。
- Beans 模块:提供了 BeanFactory ,是工厂模式的经典实现, Spring 将管理对象称为 Bean
- Core 核心模块:提供了 Spring 框架的基本组成部分,包括 loC 和 DI 功能
- Context 上下文模块: 建立在 Core 和 Beans 模块的基础之上,它是访问定义和配置的任何对象的媒介 。 其中 ApplicationContext 接口是上下文模块的焦点
- Context-support 模块:提供了对第三方库嵌入 Spring 应用的集成支持,比如缓存( EhCache 、 Guava 、 JCache) 、 邮件服务 (JavaMail) 、 任务调度( CommonJ 、 Quartz) 和模板引擎(FreeMarker 、 JasperReports 、 速率)
- SpEL 模块:是 Spring 3 . 0 后新增的模块,它提供了 Spring Expression Language 支持,是运行时查询和操作对象图的强大的表达式语言
3.2 Data Access/lntegration (数据访问/集成)
数据访问/集成层包括 JDBC 、 ORM 、 OXM 、 JMS 和 Transactions 模块
- JDBC 模块:提供了一个 JDBC 的抽象层,大幅度地减少了在开发过程中对数据库操作的编码
- ORM 模块:对流行的对象关系映射 API ,包括 JPA 、 JDO 和 Hibernate 提供了集成层支持
- OXM 模块:提供了一个支持对象/XML 映射的抽象层实现,如 JAXB 、 Castor 、 XMLBeans 、JiBX 和 XStream
- JMS 模块:指 Java 消息传递服务,包含使用和产生信息的特性,自 4 . 1 版本后支持与Spring-message 模块的集成
- Transactions 事务模块:支持对实现特殊接口以及所有 POJO 类的编程和声明式的事务管理
3.3 Web
Spring 的 Web 层包括 WebSocket 、 Servlet 、 Web 和 Portlet 模块
- WebSocket 模块: Spring 4.0 以后新增的模块,它提供了 WebSocket 和 SockJS 的实现,以及对 STOMP 的支持
- Servlet 模块:也称为 Spring-webmvc 模块,包含了 Spring 的模型一视图一控制器(MVC)和 REST Web Services 实现的 Web 应用程序
- Web 模块:提供了基本的 Web 开发集成特性,例如: 多文件上传功能 、 使用 Servlet 监听器来初始化 loC 容器以及 Web 应用上下文
- Portlet 模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Servlet 模块的功能
3.4 其他模块
Spring 的其他模块还有 AOP 、 Aspects 、 I nstrumentation 以及 Test 模块
- AOP 模块:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能
进行分离,以降低搞合性 - Aspects 模块:提供了与 AspectJ 的集成功能, AspectJ 是一个功能强大且成熟的面向切
面编程 (AOP) 框架 - Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器
中使用 - Messaging 模块: Spring 4.0 以后新增的模块,它提供了对消息传递体系结构和协议
的支持 - Test 模块:提供了对单元测试和集成测试的支持
4. SpringMVC
Spring MVC 是 Spring 提供的一个实现了 Web MVC 设计模式的轻量级 Web 框架
它与Struts 2 框架一样,都属于 MVC 框架,但其使用和性能等方面比 Struts 2 更加优
4.1 SpringMVC工作流程
- 用户通过浏览器向服务器发送请求,请求会被 Spring MVC 的前端控制器DispatcherServlet 所拦截
- DispatcherServlet 拦截到请求后,会调用 HandlerMapping 处理器映射器
- 处理器映射器根据请求 URL 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet
- DispatcherServlet 会通过返回信息选择合适的 HandlerAdapter (处理器适配器)
- HandlerAdapter 会调用并执行 Handler (处理器),这里的处理器指的就是程序中编写的Controller 类,也被称之为后端控制器
- Controller 执行完成后,会返回一个 ModelAndView 对象,该对象中会包含视图名或包含模型和视图名
- HandlerAdapter 将 ModelAndView 对象返回给 DispatcherServlet
- DispatcherServlet 会根据 ModelAndView 对象选择一个合适的 ViewReslover (视图解析器)
- ViewReslover 解析后,会向 DispatcherServlet 中返回具体的 View (视图)
- DispatcherServlet 对 View 进行渲染(即将模型数据填充至视图中)
- 视图渲染结果会返回给客户端浏览器显示 。
笔记参考: