Spring
6.1 Spring概述
6.1.1 Spring简介
核心理念为 IOC控制反转 和 AOP面向切面编程
IOC是Spring基础 - 对JavaBean管理
AOP是Spring重要特性
6.1.2 Spring优势
降低耦合度,方便开发。
支持AOP编程
支持声明式事务
方便程序测试
方便集成框架
降低JavaEE API的使用难度
6.1.3 Spring功能体系
Spring框架采用分层和模块方式, 核心容器、数据访问及集成、Web、AOP等。。。图略
6.1.4 Spring子项目
Spring Boot
Spring Cloud
Spring Data
... == 略
6.1.5 Spring5新特性
JDK基线更新 运行于Java8以上
核心框架修订
核心容器更新
支持响应式编程
支持函数式Web框架
支持Kotlin
提升测试能力
6.2 Spring的下载
https://repo.spring.io/simple/libs-release-local/org/springframework/spring/5.0.8.RELEASE/
https://mirror.bit.edu.cn/apache/commons/logging/binaries/
6.3 Spring容器机制
6.3.1 容器机制简介
Spring框架实现功能的基础
管理的类称为Bean
Spring通过XML文件或注解获取配置信息
负责创建Bean并管理Bean
6.3.2 BeanFactory接口
IOC最基本的容器接口 定义了创建和管理Bean的方法
操作Bean的方法 - 略,详见代码ch06
6.3.3 ApplicationContext接口
提供国际化访问功能,提供资源的访问支持,可同时加载多个配置文件
要获取ApplicationContext的实例,可以自定义一个实现ApplicationContextAware接口的工具类完成。
6.3.4 容器的启动过程
BeanDifinition 的 Resource定位
Resource可以使XML文件也可以是注解。 定位由ResourceLoader通过统一的Resource接口完成
BeanDifinition 的 载入与解析
将<bean> 配置信息转化为Spring容器内部的数据结构 - BeanDifinition
BeanDifinition 在 Spring注册
注册就是 通过HashMap对象持有BeanDifinition数据。 通过BeanDifiNitionRegistry接口实现
6.4 Spring的简单应用
6.4.1 环境准备
6.4.2 创建Bean
7.1 IOC控制反转 和 DI依赖注入
7.1.1 IOC控制反转
将对象的控制权由程序代码反转给容器
7.1.2 DI依赖注入
构造器注入
被注入的类中声明一个构造方法(有参/无参都可)
属性注入
被注入的类中 声明set方法,通过该set方法将参数注入对应的值
接口注入
7.2 Bean配置
7.2.1 Bean的定义
通常用XML文件实现Bean的配置 属性如下 部分省略
Class Bean对应类的全路径
Name Bean对应对象的一个标识
Scope 作用域
ID Bean对象的唯一标识
Lazy-init 是否延时加载
init-method 对象初始化方法
destory-method 对象注销方法
7.2.2 注入集合
List、Set、Map、Array 用四种元素注入<List><Set><Map><Array>
7.2.3 注入其他Bean
<property name="stu" ref="student"></property>
7.2.4 使用P:命名空间注入
xmlns:p="http://www.springframework.org/schema/p"
7.2.5 使用SpEL注入
Spring Expression Language Spring表达式语言
以#{}为定界符,可以通过Bean的id引用Bean
7.2.6 Bean的作用域 scope
Singleton 默认 单例模式
Prototype 多例模式
Request
Session
globalsession
7.2.7 Bean的生命周期 创建 初始化 销毁 的过程
需要在Bean实例初始化后执行指定行为 使用 init-method属性或实现initializingBean接口
需要在Bean实例销毁钱执行某指定行为 使用 destory-method属性或实现DisposableBean接口
7.3 注解
7.3.1 Spring注解简介
@Component 指定一个普通的Bean
@Scope 指定Bean实例的作用域
@PostConstrucat 指定Bean实例初始化后调用的方法
@PreDestroy 指定Bean实例销毁之前调用的方法
太多了... 略 知道就好
7.3.2 注解的应用
xmlns:context="http://www.springframework.org/schema/context"
8.1 AOP基础
8.1.1 AOP简介
Aspect Oriented Programming(面向切片编程)
AOP- 横向体系 OOP-纵向体系
8.1.2 AOP基本术语
连接点(JoinPoint)
程序执行过程中某个特定的节点。如初始化之后、某方法执行之前、程序处理异常时。
广义上讲,一个类或一小段程序都拥有一些具有边界性质的特定点可以被作为连接点。
由于Spring仅仅支持方法连接点,所以Spring AOP中,一个连接点是指与方法执行相关的特定节点。
通知(Advice)
目标类连接点上执行的一段代码,包括around、before、after、after-returning、after-throwing等不同的通知类型。
Spring AOP中主要是围绕方法调用而注入的行为。
切点(PointCut)
匹配连接点的断言,AOP通过切点来定位特定的连接点。通知和一个切入点表达式关联。
切入点表达式如何和连接点匹配是AOP的核心
目标对象(Target)
通知所操作的目标业务类就是目标对象。
引介(InTroduction)
引介是一种特殊的通知,为类添加一些属性和方法。通过AOP引介功能,动态添加接口的实现逻辑。
切面(Aspect)
对系统中横切关注点逻辑进行模块化封装的AOP概念实体。
Spring AOP是实施切面的具体方法,它将切面所定义的横切逻辑添加到切面所指定的连接点中。
织入(Weaving)
将通知添加到目标类具体连接点的过程。
代理(Proxy)
目标类被AOP织入后产生的一个结果类。这个结果类融合了原类和增强的逻辑。
8.2 Spring AOP的实现机制 代理模式
8.2.1 JDK动态代理
Spring AOP可以直接将IOC容器中的其他Bean实例作为目标对象。默认为JDK动态代理。
当目标对象是一个没有实现接口的类时,Spring切换为CGLib代理。
主要有两个API:
InvocationHandler是一个接口,代理类通过实现该接口,定义横切逻辑,并将横切逻辑和业务逻辑编织在一起。
Proxy 利用 InvocationHandler 动态生成目标类的代理对象。
在Java.lang.reflect包中。
只能为接口创建代理实例。
8.2.2 CGLib动态代理
通过继承的方式动态创建代理对象 依靠Enhancer类创建代理实例 依靠MethodInterceptor接口织入要增强的方法
8.3 Spring AOP的开发方法
8.3.1 基于XML开发Spring AOP 详见代码ch08/demo02
aop:config
aop:aspect - 切面
aop:advisor - 通知
aop:pointcut - 切点
8.3.2 基于注解开发Spring AOP
@Aspect 指定切面
@Pointcut 指定切点
@Before
@After
@Around
@AfterReturing
@AfterThrowing
8.4 多个切面的优先级
8.4.1 基于注解配置
优先级越高的切面,通知方法优先执行并最后退出。@Order()越小优先级越高
8.4.2 基于Ordered接口配置
实现Ordered接口,配置优先级。
8.4.3 基于XML配置
<aop:config order="1">
8.5 Spring AOP的应用
8.5.1 性能监控
检测运行状况并识别瓶颈,来提高程序的性能。
8.5.2 异常监控
统一监控并处理项目中的异常。
异常监控有不同的具体做法:基本思路为-将业务逻辑与异常监控解耦
9.1 Spring JDBC基础
9.1.1 JDBC简介
core
object
dataSource
support
Spring封装了传统JDBC并提供了JDBCTemplate类,是Spring JDBC的核心
9.1.2 JDBCTemplate类
ComboPooledDataSource - 数据源
注入JDBCTemplate类
包含所有操作数据库的方法。
使用前要为其提供数据源
9.1.3 简单使用JDBCTemplate
详见代码ch09
9.1.4 Spring中管理JDBCTemplate
Spring容器中注册数据源 -- 数据源既可以是Spring内部提供的 也可以是第三方连接池 以C3P0为例
注册JDBCTemplate类
向JDBCTemplate类注入数据源
详见代码ch09
9.2 JDBCTemplate操作数据库
9.2.1 实现DDL(数据定义语言)操作
execute()
9.2.2 实现DQL(数据查询语言)操作
query()
queryList()
queryForObject()
将结果集中的字段值映射为自定义类的属性,
要通过RowMapper<T>接口,其中定义了一个mapRow()方法,该方法用于完成字段值和类的属性的映射
为了简化开发,Spring提供了RowMapper<T>接口的实现类BeanPropertyRowMapper<T>
9.2.3 实现DML(数据操纵语言)操作
update()
9.3 Spring JDBC实现Dao封装
9.3.1 直接注入JDBCTemplate
在Dao里面创建JDBCTemplate的属性,由Spring管理。
9.3.2 继承JDBCDaoSupport
其内部定义了JDBCTemplate类型的成员变量。
10.1 Spring与事务管理
10.1.1 Spring对事务管理的支持
事务是一系列的SQL指令组成。
基于Spring IOC和Spring AOP,Spring提供了声明式事务管理方式。
10.1.2 事务管理的核心接口
TransactionDefinition
定义事务属性、隔离级别、传播行为、事务的超时时间和是否可读。
TransactionStatus
界定事务的状态
PlatformTransactionManager
事务管理的中心接口,并针对不同的持久化技术封装了对应的实现类。
10.2 编程式事务管理
Spring为编程式事务管理提供了模板类TransactionTemplate,
封装了与PlatformTransactionManager相关的事务界定操作
org.springframework.transaction.support.TransactionTemplate
DataSourceTransactionManager事务管理器
org.springframework.jdbc.datasource.DataSourceTransactionManager
可通过callback()接口实现
10.3 声明式事务管理
10.3.1 使用XML配置声明式事务
10.3.2 使用注解配置~
@Transactional注解 、可用于接口、接口方法、类、类方法
11.1 Spring MVC概述
11.1.1 Spring MVC简介
SpringMVC 可用于构建Web程序的MVC框架,提供一个前端控制器来分发请求,还提供有多样化配置、表单校验、自动绑定用户输入等。
灵活、高效、配置方便。
11.1.2 Spring MVC功能组件
DispatcherServlet 前端控制器
拦截客户端请求并分发给其他组件 - Spring MVC程序的入口
HandlerMapping 处理器映射器
根据客户端请求的URL寻找处理器
Handler 处理器
负责对客户端的请求进行处理
HandlAdapter 处理器适配器
根据特定的规则对处理器进行执行
ViewResolver 视图解析器
视图解析,将处理结果生成View视图,展现给用户
11.1.3 Spring MVC的工作流程
主要是围绕DispatcherServlet展开
11.2 Spring MVC重要API
11.2.1 DispatcherServlet类
首先是一个普通的Servlet类 - 在web.xml中配置DispatcherServlet
11.2.2 DispatcherServlet类的辅助API
Controller接口
。。。略,详见代码ch11
11.2.3 Controller接口
11.2.4 ModelAndView类
11.3 Spring MVC的简单应用
11.4 Spring MVC的常用注解
11.4.1 @ReuqestMapping
用于处理请求地址映射,用于类上表示为父路径,用于方法上称为处理请求的方法
11.4.1 @ReuqestParam
用于获取请求参数的值,可以将请求参数赋值给方法中的形参 value required defaultValue
11.4.2 @PathVariable
获取URL中动态参数,支持动态URL访问并可以将URL中动态参数映射到处理方法的形参上
11.4.4 @CookieValue
获取Cookie数据,将Cookie映射到功能处理的形参上
11.4.5 @RequestHeader
获取请求头中的数据,可以将其数据映射到形参上
12.1 Spring MVC数据绑定
12.2 简单数据绑定
提交请求的数据是通过形参来接收的,
12.2.1 绑定默认数据类型
12.2.2 绑定简单数据类型
12.2.3 绑定POJO类型
12.2.4 绑定包装POJO类型
12.2.5 自定义数据绑定
12.3 复杂数据绑定
12.3.1 绑定数组
12.3.2 绑定集合