第一章:初识Spring
文章目录
读取源码的通用方法:
1、ctrl+F12:查看类中方法
2、ctrl+H:查看该类的继承类
3、可以右键查看继承树:先查询抽象类或者接口,掌握大方向,再扣细节
3、ctrl+N:查询到类的位置
源码构建参考:https://www.zhihu.com/question/483901712
一、spring架构原理图
图片解读:
读取资源文件=》生成BeanDefinition(bean定义信息)=》根据bean定义信息生成bean
二、spring核心接口的分析
- 基础接口
Resource(1、有资源)+ ResourceLoader (2、资源加载)
BeanDefinitionReader(3、读取的资源转化为bean定义信息)
BeanDefinition(4、bean定义信息)
BeanDefinitionRegistry(5、将bean定义信息放到档案馆中)
BeanFactory(6、在档案馆中取图纸交给bean工厂造东西)
ApplicationContext
Aware
- 生命周期-后置处理器
BeanFactoryPostProcessor
InitializingBean
BeanPostProcessor
1、Resource(有资源)
2、ResourceLoader (读取资源)
这是个策略接口
通过getResource取加载策略
策略模式
3、BeanFactory
1、bean工厂的继承图
BeanFactory下面有三大工厂
- HierarchicalBeanFactory:定义父子工厂(父子容器)
- ListableBeanFacotory:的实现是DefaultListableBeanFactory,保存了ioc容器中的核心信息
- AutowireCapableBeanFactory:提供自动装配能力
AnnotationApplicationContext组合了档案馆,他有自动装配能力。
2、对ListableBeanFactory分析
3、分析上面的策略模式(AbstractApplicationContext)
/**
* ResourcePatternResolver used by this context.
*/
// 策略模式的环境类
private ResourcePatternResolver resourcePatternResolver;
/**
* Create a new AbstractApplicationContext with no parent.
*/
public AbstractApplicationContext() {
this.resourcePatternResolver = getResourcePatternResolver();
}
4、DefaultListableBeanFactory工厂中的很多池缓存功能很重要
4、BeanDefinition(bean的定义信息)
5、BeanFactory的子接口DefaultListBeanFactory
1、通过XML的bean注入的方式,跟踪堆栈(给DefaultListBeanFactory的存放map的地方大断点)
this.beanDefinitionMap.put(beanName, beanDefinition);
2、使用XML的方式,模拟创建bean,来跟踪堆栈查看源码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.future.end.bean.Person" id="person">
<property name="name" value="刘阿三气shi人"/>
<property name="id" value="13"/>
</bean>
</beans>
3、主类入口直接使用xml注入
public class MainTest {
public static void main(String[] args) {
// 通过配置文件创建bean
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("beans.xml");
Person bean = classPathXmlApplicationContext.getBean(Person.class);
System.out.println(bean);
}
}
6、BeanDefinitionRegistry接口,这个是DefaultListableBeanFactory的父接口
1、由上可知,beanDefinition(bean定义信息)就放在BeanDefinitionRegistry中
7、ApplicationContext(IOC容器)
1、ioc事件派发器
2、国际化解析
3、bean工厂功能—自动装配被组合进来的
4、资源解析功能
8、初识xxxAware接口
1、可能项目中想用到一些spring的Aware接口,那就可以通过spring提供的接口,实现其回调方法
三、总结
1、spring总体架构:
1、资源文件=》2、被资源读取器读取=》3、将读取出来的资源,封装成Beanfinition=》4、将bean定义信息放到档案馆中(BeanDefinitionRegistry,实际是DefaultListableBeanFactory中的一个map)=》5、定义信息准备好之后开始按照定义信息,调用构造器创建一个bean=》6、调用一写aware后置处理器去给bean赋值【注:这里可能有错误,第二章将继续学习讲解】
2、将核心接口串联起来
按照第二节,和总体架构串联一下即可
参考:
- 雷丰阳老师spring源码课程讲解
- spring官方源码
=========================》甲乙 2022.08.25
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96197.html