Ioc设计实现及Spring源码分析
Spring课程内容介绍
Ssm = spring + springmvc + mybatis
Spring全家桶:脚手架框架SpringBoot、微服务框架SpringCloud
Spring框架整体回顾
Spring是分层的full-Stack(全栈)轻量级开源框架,以IoC和AOP为内核,提供了展现层SpringMVC和业务层事务管理等众多的企业级应用技术,还能整合众多著名的第三方框架和类库。
IoC思想巩固
注意:IOC和AOP在Spring之前就存在,只不过更偏向于理论化,Spring在技术层次把这两个思想做了非常好的体现(java)
第1节 IoC
1.1什么是IOC?
IoC Inversion of Control(控制反转/反转控制)
描述的事情:Java开发领域对象的创建,管理的问题
传统的开发方式:比如类A依赖于类B,往往会在类A中new一个B的对象
IoC思想下开发方式:我们不用自己去new对象,而是由IoC容器去帮我们实例化对象并管理,我们需要使用对象的时候,去问IoC容器要即可。
我们丧失了一个权力(创建、管理对象的权力),得到了一个福利(不用考虑对象的创建、管理等一系列事情)
为什么叫控制反转?
控制:指的是对象创建(实例化、管理)的权力
反转:控制权交给外部环境了(Spring框架、IoC容器)
1.2 IOC解决了什么问题?
IoC解决对象之间的耦合问题
1.3 IOC和DI的区别
DI:Dependancy InJection(依赖注入)
2.1 什么是AOP?
AOP:Aspect oriented Programming 面向切面/方面编程
AOP是OOP的延续,从OOP 说起
OOP三大特征:封装、继承、多态
OOP是一种垂直继承体系
OOP在一些情况下不能很好的解决横切逻辑代码的问题
横切逻辑代码:
横切逻辑代码的使用场景很有限:一般是事务控制,权限校验,日志(Mybatis集成日志需要了解)
难点:如何在不改变原有业务逻辑的情况下,悄无声息的把横切逻辑代码应用到原有的业务逻辑中,达到原来的效果?
2.2 AOP在解决什么问题?
在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦,避免横切逻辑代码重复。
2.3 为什么叫面向切面编程?
【切】:指横切逻辑,原有业务逻辑代码不能动,只能操作横切逻辑代码,所以面向横切逻辑。
【面】:指逻辑代码往往需要影响的是很多个方法,每个方法如同一个点,多个点构成面,有一个面的概念在里面
Spring Ioc基础知识说明
Spring框架的IOC实现
BeanFactory和ApplicationContext的区别
BeanFactory是Spring框架中IoC容器的顶层接口,它只是用来定义一些基础功能,定义一些基础规范,而ApplicationContext是它的一个子接口,所以ApplicationContext是具备BeanFactory提供的全部功能的。
通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的高级接口,比BeanFactory要拥有更多的功能,比如说国际化支持和资源访问(xml,java配置类)等等。
Spring IOC的纯XML模式回顾
Bean的创建——Spring ioc 实例化Bean的三种方式
Bean标签解析
Spring DI依赖注入配置回顾
DI依赖注入的XML配置
Xml与注解相结合的模式
@Autowired按照类型注入,如果按照类型无法唯一锁定对象,可以结合@Qualifier进行使用
纯注解模式回顾
高级特性之Lazy-init 延迟加载
ApplicationContext容器的默认行为是在启动服务器时将所有的singleton bean提前进行实例化。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。
如果不想让一个singleton bean在ApplicationContext实现初始化时被提前实例化,那么可以将bean设置为延迟实例化。
设置lazy-ini为true的bean将不会在ApplicationContext启动时提前被实例化,而是第一次向容器通过getBean索取bean时实例化的。
应用场景:
FactoryBean和BeanFactory
BeanFactory接口是容器的顶级接口,定义了容器的一些基础行为,负责生产和管理Bean的一个工程,具体使用它下面的子接口类型,比如ApplicationContext;此处重点分析FactoryBean。
Spring中Bean有两种,一种是普通Bean,一种是工厂Bean(FactoryBean),FactoryBean可以生成某一个类型的Bean实例(返回给我们),也就是说我们可以借助于它自定义Bean的创建过程。
后置处理器
Spring提供了两种后处理Bean的扩展接口
注意后置处理器在生命周期中的执行位置
Spring源码剖析之注意事项及源码构建
源码深度剖析-IoC容器初始化主体流程之BeanFactory及容器继承体系
源码深度剖析-IoC容器初始化主体流程之Bean周期关键时机点代码调用分析
思路:创建一个类lagouBean,让其实现几个特殊的接口,并分别在接口实现的构造器、接口方法中断点,观察线程调用栈,分析出Bean对象创建和管理关键点的触发时机。
源码深度剖析-IoC容器初始化主体流程之refresh方法
Refresh方法完成了Spring中ioc容器初始化中的很多动作
源码深度剖析-BeanFactory获取子流程
源码深度剖析_BeanDefinition加载注册子流程
1.ApplicationContext的三个常用实现类
ClassPathXmlApplicationContext:可以加载类路径下的配置文件,不在的话加载不了
FileSystemXmlApplicationContext:可以加载磁盘任意路径下的配置文件(必须有访问权限)
AnnotationConfigApplicationContext 用于读取注解创建容器的
Spring事务管理API有100个左右,其中最核心的API有3个,分别是TransactionDefinition、 PlatformTransactionManager、TransactionStatus。TransactionDefinition定义事务管理五个属性,PlatformTransactionManager执行具体的事务,TransactionStatus提供控制事务执行和查询事务状态的方法。