Spring源码的整体脉络

Spring的核心

Spring是一个容器,是IOC和AOP的容器,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

Spring的IOC初始化流程

  1. 配置Spring

一般情况配置Spring有两种方式:xml和注解,两种方式的类上下文加载器分别是:
Xml:new ClassPathXmlApplicationContext();
Annotation:new AnnotationConfigApplicationContext();

  1. 通过上下文加载器读取Bean定义

1.BeanDefinitionReader读取Bean定义
2. BeanDefinitionScanner扫描Bean包,看看哪些是被@Component注解的类
3.BeanDefinitionRegistry注册Bean定义,将Bean定义存入到BeanDefinitionMap中

  1. 通过BeanFactory的后置处理器,可以修改Bean定义或者是新增Bean定义
    BeanFactoryPostProcessor:修改Bean定义
@FunctionalInterface
public interface BeanFactoryPostProcessor {
	 // 如果需要修改Bean定义,只需要自己实现这个类即可,实现该方法时,
	 //可以获取到BeanFactory,拿到BeanFactory后可以自行修改Bean定义等一系列参数
	void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

BeanDefinitionRegistryPostProcessor:注册Bean定义

public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {
	// 如果需要注册Bean定义,只需要实现此方法即可,可以自动获取到BeanDefinitionRegistry
	// 拿到BeanDefinitionRegistry在自己实现的代码里面创建Bean定义,然后调用注册方法即可
	void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
}
  1. 将生成好的Bean定义存放到BeanDefinitionMap中,Key为BeanName,Value为BeanDefinition的实体类
  2. 通过BeanFactory的getBean()方法,从BeanDefinitionMap中获取Bean定义,并且生成Bean实体。

Spring的Bean的生命周期

  1. 实例化Bean,此时还不可以被@Autowared

实例化Bean有两种常用的方式

  1. 工厂方式:自己实现工厂,可以自己控制Bean的生成的所有过程
  2. 反射方式:完全交给Spring管理,不可自控:@Component
  1. 填充属性,此时可以@Autowared
  2. 初始化Bean
  3. 将初始化的Bean存放到BeanMap中,key为BeanName,value为Bean实体(一级缓存,单例池)
  4. 在Spring创建Bean的过程中会调用九次后置处理器,各种各样的功能,AOP就在其中一次实现
  5. 在创建Bean的过程中会调用大量的Aware,可以对类进行各种操作

ApplicationContext和BeanFactory的异同点

  1. 相同点:他们都可以创建Bean
  2. 不同点:

BeanFactory只能用来创建Bean
ApplicationContext中集成了大量的扩展点,使其可以对Bean做各种操作。ApplicationContext还集成了国际化,事务等一系列复杂的扩展点。使其可以完成读取配置,生成Bean定义,修改Bean定义,新增Bean定义,生成Bean等等的操作。
但也是因为ApplicationContext中集成了太多的东西,所以在小内存设备比如移动穿戴设备上开发的时候不建议用ApplicationContext,反而更建议用BeanFactory

Spring的扩展点

BeanFactoryPostProcessor:BeanFactory的后置处理器,可以用来修改Bean定义
BeanDefinitionRegistryPostProcessor:Bean定义的后置处理器,可以用来注册Bean定义,新增一个Bean定义
其余的暂且不知道。。。以后再补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值