模块二、Ioc容器设计实现及Spring源码分析
任务一、自定义IoC&AOP框架
1.Spring框架课程内容介绍
2.Spring框架整体回顾
全栈轻量级开源框架
3.Ioc编程思想巩固
将类管理入IOC容器中
4.IoC和DI区别说明
类初始化的依赖由Spring容器管理,当依赖类变更时很方便替换
IoC与DI说的同一件事,角度不同。IoC站在对象的角度,将控制权交给了容器。DI站在容器的角度,容器将实例所依赖的其他对象注入
5.AOP编程思想巩固
6.手写IoC和AOP之问题分析
耦合性太高
无事物控制
7|8.手写IoC和AOP之new关键字耦合问题
使用BeanFactory读取xml文件,反射生成所需实例
设计模式
工厂模式:根据传递参数生成不同对象
抽象工厂模式:工厂接口,生成多个生成单一对象的工厂
单例模式:分为懒汉模式和饿汉模式
9.手写IoC和AOP之事务控制问题分析
两次update放在一次connection中,具体就是将connection放入当前线程TreadLocal中
事务控制放入service层
10.当前线程绑定唯一Connection
11.Service添加事务控制
12.JDK动态代理扩展
Jdk.newProxyInstance和InvocationHandler
13.CGLIB动态代理
Enhance.create和MethodInterceptor
14.手写service改写动态代理
任务二、Spring IOC高级应用和源码剖析
1.SpringIoC基础知识说明
纯xml
JavaEE:ClassPathXmlApplicationContext或FileSystemXmlApplicationContext
JavaWeb:ContextLoaderListener
xml加注解
同上
注解
AnnotationConfigApplicationContext
2.BeanFactory和ApplicationContext的区别
BeanFactory是顶级实现接口
ApplicationContext增加了一些功能,比如国际化
3.Spring IoC纯xml模式回顾
4.Bean创建的方式和Bean标签属性回顾
单例:生命周期与容器相同
多例:生命周期不受容器管理
5|6|7.从xml到注解
8.高级特性之Lazy-init延迟加载
9.高级特性之FactoryBean
BeanFactory是顶级接口,定义容器的基础行为;FactoryBean是工厂Bean,可以定义实例的生成过程,用于在容器中生成复杂对象
10.高级特性之后置处理器
分为BeanPostProcessor和BeanFactoryPostProcessor
BeanFactoryPostProcessor:BeanFactory初始化后调用
BeanPostProcessor:在Bean对象实例化之后调用
springBean的生命周期图
在生命周期开启前,用BeanDefinition保存配置信息等;BeanFactoryPostProcessor也是生效在Bean实例化之前
11.IOC容器初始化主体流程
BeanFactory及容器继承体系
BeanFactory容器继承体系
refresh方法
创建工厂:ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
获取BeanFactory;默认实现是DefaultListableBeanFactory
BeanFactory获取流程
加载BeanDefition 并注册到 BeanDefitionRegistry
注册到BeanDefitionRegistry
执行工厂后置处理器:invokeBeanFactoryPostProcessors(beanFactory);
注册bean的后置处理器:registerBeanPostProcessors(beanFactory);
实例初始化:finishBeanFactoryInitialization(beanFactory);
解决循环依赖图
任务三、IoC容器设计实现及Spring源码分析
AOP相关术语回顾
Joinpoint(连接点)
法开始时、结束时、正常运行完毕时、方法异常时等这些特殊的时机点,我们称之为连接点,项目中每个方法都有连接点,连接点是一种候选点
Pointcut(切入点)
指定AOP思想想要影响的具体方法是哪些,描述感兴趣的方法
Advice增强
指的是横切逻辑
方位点(在某一些连接点上加入横切逻辑,那么这些连接点就叫做方位点,描述的是具体的特殊时机)
Aspect切面
Aspect切面= 切入点+增强
事务回顾之事务特性
事务四大特性
原子性
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。从操作的⻆度来描述,事务中的各个操作要么都成功要么都失败
一致性
与原子性描述的是一回事,只是从数据角度出发
隔离性
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,每个事务不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
事务隔离级别
脏读:一个线程中的事务读到了另外一个线程中未提交的数据。
可重复读:一个线程中的事务读到了另外一个线程中已经提交的update的数据(前后内容不一样)
虚读(幻读):一个线程中的事务读到了另外一个线程中已经提交的insert或者delete的数据(前后条 数不一样)
数据库定义的四种隔离级别
Serializable(串行化):可避免脏读、不可重复读、虚读情况的发生。(串行化) 最高
Repeatable read(可重复读):可避免脏读、不可重复读情况的发生。(幻读有可能发生) 第二该机制下会对要update的行进行加锁
Read committed(读已提交):可避免脏读情况发生。不可重复读和幻读一定会发生。 第三
Read uncommitted(读未提交):最低级别,以上情况均无法保证。(读未提交) 最低
AOP代理对象创建流程
调用图
XMind: ZEN - Trial Version