FRAMEWORK
IMAGES
一图胜百文
1. MYBATIS 框架 2
1.1. MYBATIS 架构分析 2
1.1.1. Mybatis 应用架构 3
1.1.2. Mybatis 产品架构 3
1.1.3. MyBatis 技术架构 4
1.2. MYBATIS 应用实现 4
1.2.1. Mybatis 工厂对象创建 4
1.2.2. MyBatis 会话对象应用 5
1.2.3. MyBatis 基于Mapper接口应用 5
1.2.4. MyBatis 缓存应用分析 6
2. SPRING 框架 7
2.1. SPRING IOC 模块 7
2.1.1. Spring Bean 容器的初始化 7
2.1.2. Spring 中的两大map对象 8
2.1.3. Spring 中两大bean对象 9
2.1.4. Spring 中两大bean对象描述方式 10
2.1.5. Spring 中Bean对象的依赖注入 10
2.2. SPRING MVC 模块 12
2.2.1. Spring MVC 核心架构 12
2.2.2. Spring MVC 拦截器对象 13
2.2.3. Spring MVC 异常处理 14
2.3. SPRING AOP 模块 14
2.3.1. Spring AOP 动机 14
2.3.2. Spring AOP 原理实现 15
3. AJAX 技术 18
3.1. Ajax技术简介 18
3.1.1. Ajax 概述 18
3.1.2. Ajax 应用模型 18
3.2. Ajax 请求过程分析 19
3.3. Jquery中ajax函数应用 20
4. DBLMS旅游系统 20
4.1. 项目简介 20
4.1.1. 需求概述 20
4.1.2. 业务分析 20
4.2. 项目设计 21
4.2.1. 分层架构 21
4.2.2. 技术架构 22
4.2.3. 表设计 23
4.3. 框架整合 23
4.3.1. 整合过程分析 23
4.3.2. 核心执行流程 24
5. Shiro 框架应用 25
5.1. 用户资源访问过程需求分析 25
5.2. 授权过程设计 25
5.3. Shiro 框架应用 26
5.3.1. Shiro核心架构 26
5.3.2. Shiro用户认证实现 27
5.3.3. Shiro用户授权实现 28
MYBATIS 框架
MYBATIS 架构分析
Mybatis 应用架构
MyBatis 是一个持久层框架,实现了对JDBC操作的封装,主要用于简化JDBC
操作中的一些相对繁琐的步骤,例如参数的映射,结果集的映射等。

为何使用mybatis实现数据持久层应用?
- 稳定,灵活(动态SQL),功能强大(池,日志,缓存)
- 学习以及使用成本低
- 解耦,SQL的可维护性,可复用性比较高。
Mybatis 产品架构
所有框架都要解决一些共性问题(持久化),都是一种半成品,mybatis也不例外,它作为一种框架,它要解决相关问题,如何解决问题?采用怎样的架构解决问题,这是我们要学习的一个点。
战略:挟天子以令诸侯
MyBatis 技术架构

MYBATIS 应用实现
Mybatis 工厂对象创建

MyBatis 会话对象应用
MyBatis中实现与数据库会话需要借助SqlSession对象。

MyBatis 基于Mapper接口应用

原理分析:

MyBatis 缓存应用分析
Mybatis 一级缓存(SqlSession),SqlSession关闭时一级缓存失效。在同一个事务内部多次执行同一个查询,后续查询会从此缓存取数据。

MyBatis二级缓存:(SqlSessionFactory),跨session共享数据时,可以打开和配置二级缓存。

SPRING 框架
SPRING IOC 模块
IOC 是一种设计思想,称之为控制反转。基于这种思想实现对象创建,对象的科学管理以及应用时的解耦(借助DI机制实现)。Spring框架核心就是基于这种机制进行了完美实现。
说明:
- 控制反转探讨的是什么?谁控制谁的问题(spring控制对象的创建管理)
- 生活中的IOC的实现?(例如股票操盘手,父母包办婚姻)
Spring Bean 容器的初始化
如何理解Spring 中的Bean对象?
由spring管理的对象都是Bean对象。
如何理解Spring中的Bean容器呢?
存储Bean对象的容器,可以是map对象。
我们自己写的类如何交给spring管理?
- 通过xml进行描述,例如
- 通过annotation方式进行描述,例如@Controller,@Service,…
- Spring 中Bean对象的类型?
- 未实现FactoryBean接口的对象
- 实现了FactoryBean接口的对象
Spring 中如何创建Bean对象?
借助工厂(BeanFactory)基于反射技术创建Bean对象。
Spring 管理的bean对象常用作用域?
- singleton (单例作用域):bean对象具备全局唯一性
- Prototype (多例作用域): 每次获取bean对象都会创建一个新的实例。
- Spring 管理的Bean对象是否支持延迟加载?支持。
- 如何自己设计一个IOC容器呢?
例如spring中的bean容器初始化
IOC Bean容器(配置文件,工厂,容器,全局访问点)
Spring 中的两大map对象
1.如何理解Spring中的两大map对象?
- 一个map用于存储bean的配置信息
- 一个map用于存储bean的实例信息


Spring 中两大bean对象
Bean对象创建
- 未实现FactoryBean接口(直接构造方法)
- 实现FactoryBean接口(调用FactoryBean对象的getObject方法)

说明:一般在创建一些相对复杂的工厂对象时,通常会写一个工厂bean对象,
然后基于工厂bean对象创建具体的工厂对象,例如SqlSessionFactoryBean,
ShiroFilterFactoryBean,ProxyFactoryBean等。
Spring 中两大bean对象描述方式
Bean 对象的描述
- xml方式 (例如
) - annotation方式(@Service,@Controller,@Configuration,@Bean,..)
Spring 中Bean对象的依赖注入
IOC 依赖注入(为对象属性赋值)基本概念

IOC 依赖注入在项目中的应用实现:

IOC增强:整合MYBATIS
方式1:

方式2:

SPRING MVC 模块
MVC是一种分层架构设计思想,目的是基于对象职责上的不同,进行分层设计,实现各司其职,各尽所能,以提高代码的可维护性,可扩展性。Spring MVC中的MVC模块是基于MVC设计思想的一种完美实现。类似的还有struts2等。
Spring MVC 核心架构
SPRING MVC模块中核心组件对象分析:

Spring MVC 请求响应处理
所有MVC框架的重点都在请求和响应数据的处理上。
请求处理
请求路径(普通方式,rest方式) :404
- 请求方式(Get请求,Post请求):405
- 请求参数(直接量,PO对象,MAP对象):400
- 响应处理
- 响应方式(转发,重定向redirect)
- 响应数据封装(ModelAndView,Model,Map)
- 响应数据转换(将对象序列化为JSON格式字符串)
Spring MVC 拦截器对象
拦截器是项目中的一种通用组件,通常可以在某个对象执行之前或之后做一些预处理操作,可以将其看成是一种特殊的过滤器。

需求:通过拦截器限定系统的登录时间。

说明:项目中自己编写Spring MVC拦截器
1)编写类实现HandlerInterceptor接口或者继承
HandlerInterceptorAdapter
2)配置拦截器(
Spring MVC 异常处理
1,项目中异常的处理方式及规则:
- 异常捕获(try{}catch{}),日志输出。
- 继续抛出(数据抛给业务层,业务层在继续抛给控制层),但是要记住异常传递是要占用资源,对性能会有一定影响,所以异常能处理则处理,处理不了则继续抛出。

Spring MVC 中对异常处理的手段有两种:
直接在控制层方法中处理异常(处理异常的方法使用@ExceptionHandler修饰,并指定具体可以处理的异常类型)
- 定义全局异常类,在此类中对异常信息进行封装和转换。
说明:当Controller类中定义了局部异常处理方法,在全局异常处理类中也定义了同样的异常处理方法,那遵循局部优先规则。
SPRING AOP 模块
AOP 是一种面向切面设计思想,基于这种思想可动态为对象添加扩展功能甚至控制对象的执行。Spring 框架中对这种思想做了一个完美实现。
Spring AOP 动机
Spring 框架中可以基于AOP实现对目标对象的控制及功能扩展:

例如:
Spring AOP在我们项目中要实现的功能
Spring AOP 原理实现
Spring 中AOP原理分析:
- 目标对象实现了接口则采用JDK动态代理控制目标对象
- 目标对象为实现接口则采用CGLIB代理控制目标对象。
Spring AOP案例分析:
1)项目中的日志管理(基于JDK动态代理实现目标对象控制及功能扩展)

Spring AOP 其它案例实现:

AOP底层代理代理对象创建及应用分析:
JDK 动态代理
CGLIB代理分析

Spring AOP 相关术语
- 切面(Aspect):封装了扩展功能的对象
- 通知(Advice):封装了扩展功能及目标方法调用的一个切面方法。
@Around,@Before,@After,@AfterReturning,@AfterThrowing
3.连接点(JointPoint,ProceedingJoinPoint):泛指一个目标方法
4.切入点(Pointcut):泛指多个目标方法的集合
说明:了解常用的切入点表达式
- bean(*ServiceImpl)
- @annotation(com.db.common.annotation.RequiredLog)
- …
AJAX 技术
Ajax技术简介
Ajax 概述
Ajax是一种客户端技术,它基于异步技术实现局部加载,异步刷新从而提高系统响应速度,改善用户体验。最大缺陷是不能跨域。
Ajax 应用模型
传统的web同步模型(多个请求要顺序执行)。
Ajax异步Web应用模型:(多线程并发,尽量减少客户端的阻塞)
Ajax 请求过程分析

说明:ajax入口对象为XmlHttpRequest对象,是使用ajax的入口
Jquery中ajax函数应用
Jquery中的ajax应用相关函数实现了对象XHR(XmlHttpRequest)对象的封装。通过这些封装以后的方法,可以简化ajax请求和响应处理的过程。常用的有:
- ajax({…})
- load(url,[params],[callback])
- get(url,params,callback)
- getJSON(url,params,callback)
- post(url,params,callback)
说明:如何使用如上函数,参考官方文档或doc.tedu.cn网站的jquery问题。
DBLMS旅游系统
项目简介
需求概述
公司基于旅游市场高端用户需求,决定研发一套旅游生态系统,此系统中包含旅游电商系统,旅游业务系统等,本次项目会从旅游业务系统着手进行实现。
业务分析
旅游业务系统中的系统管理模块业务分析:

项目设计
分层架构
企业项目的业务分层架构实现:(复杂问题简单化,分而治之)

对复杂问题进行分解,分而治之,实现各司其职,各尽所能,以提高程序可扩展性,可维护性。
技术架构

技术栈:
客户端:html+css+js+ajax+jquery+bootstrap+adminLTE
服务端:Spring+SpringMVC+MyBatis+Shiro+Ehcache
数据库:MySql
表设计
系统模块中表关系设计
框架整合
整合过程分析
整合步骤实现:

例如:代码架构(日志查询)

核心执行流程

Shiro 框架应用
用户资源访问过程需求分析

授权过程设计
RBAC:基于资源的访问控制(粗粒度,细粒度)
Shiro 框架应用
Shiro核心架构

Shiro用户认证实现
登陆前的资源访问

Shiro 认证分析:

Shiro 登录认证实现:

其时序图如下:

Shiro用户授权实现
其时序图如下:

