spring源码

BeanFactory Spring 顶层核心,使用了简单工厂模式
用唯一标识获得Bean对象:

Caer car = context.getBean("name",Cra.class);

获取bean
1.@(注解方式): new AnnotionConfigApplicationContext 上下文是bean工厂的搬运工牌
2.xml : new ClassPathXMLApplicationContext(“xml”)

这两种方式都要读成统一的一种方式:BeanDefinition ==》通过BeanDefinitionRegistry(注册器)到BeanDefinitionMap容器

1.还得有去读取去联系的类:BeanDefinitionReader
2.读到之后还需要扫描出来:BeanDefinitionScanner
3.注册BeanDefinitionRegistry(注册器)到BeanDefinitionMap容器
4.最后才可以getBean

Bean工厂和上下文的对比
1.有生产bean的能力,但是上下文是调用工厂生产的,不是自己生产
2.bean工厂需要先注册定义,再一个个的生产,context却可以直接扫描
3.context的职责比较多,bean工厂只生产bean

Bean的生命周期:
1.实例化(反射):实例化之后,@Autowired的属性并没有加载进来
2.注入属性:@Autowired@value
3.初始化:initMethod destroy
4.put(“beanName”,Bean的实例)进Map<BeanName,value>单例池,一级缓存

生产bean的时候一个问题:循环依赖
spring解决循环依赖的方法是:三级缓存(三个map)
实例化有两种方式:反射和工厂方法

在bean的生命周期中有9次可以调用bean后置处理器
bean后置处理器作用:
1.直接返回bean,停止创建
2.指定实例化构造函数
3.属性注入的预解析
4.解决循环依赖:getEarlyBeanRefenrence
5.中止赋值
6.注入属性进行DI:postProcessAfterinstantiation
7.初始化前调用@postContruct
7.1初始化中,使用了很多beanFactory的回调函数 BeanNameAware、beanClassLoaderAware、BeanFactoryAware、EnvironmentAware
在这里插入图片描述

8.初始化后 AOP:创建代理(为了与IOC解耦)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值