Spring源码学习01——Spring是什么?

使用Spring生态三四年了,从来只是使用,也没看过里面的内容。今日开始走进Spring。

一、Spring是什么?

Spring是框架,是生态,提供了一系列衍生的产品。扩展性高。

Spring包括两部分:IOC 和 AOP

IOC:控制反转(对象交给Spring控制,需要的时候通过容器注入 )【是一种思想】
--------IOC是容器,可以存放Bean

DI:依赖注入(把属性进行注入操作)【是一种属性】

在这里插入图片描述

二、bean的前世今生

在Spring中,bean是写在xml文件中的。

在这里插入图片描述

通过ApplicationContext获取

在这里插入图片描述

bean的初始过程

加载xml文件,解析xml内容,创建初始bean(就是执行构造方法),实例化bean,把bean放到容器中,使用时从容器中获取bean。

在这里插入图片描述

容器使用map存bean,正常情况下 key为String类型,value为Object类型。所以我们才可以通过class名来取bean。
此外,还通过三级缓存来解决循环依赖,这里还是用 key为String类型,但value是使用 ObjectFactory类型。
当然,读取出来是String类型,再转成对象,需要BeanDefinition(对象定义信息)

在这里插入图片描述

Spring中的bean默认单例

scope:作用域
singleton:单例
prototype:每次用的时候创建新的

在这里插入图片描述

为什么 beanDefinition创建bean的实例时,用的是反射而不是new?

使用反射可以获取当前类的所有属性、方法、注解、构造器等。
而使用new则过于死板。不够灵活。

在这里插入图片描述

三种得到Class的方式:
Class.forName(包名.类名)
对象.getClass()
类名.class()

得到Class对象后,获取对应的构造方法
Constructor stor=clazz.getConstructor();
stor.newInstance();

在这里插入图片描述
在这里插入图片描述
实例化是给对象在堆里开辟空间,赋的值都是默认值。而初始化是给属性赋值,填充属性,是执行初始化方法。

在这里插入图片描述
在这里插入图片描述
这个是自动代理创建器抽象类,继承了ProxyProcessorSupport类,重写 before 和 after ,即
在这里插入图片描述
在这里插入图片描述
会创建代理

在这里插入图片描述
在这里插入图片描述
往里面跟进
在这里插入图片描述
就是常用的JDK代理和CGlib代理

Aware接口的作用:当Spring容器创建的Bean对象在进行具体操作时,如果需要容器的其他对象,此时可以将对象实现Aware接口来满足当前需求。

在这里插入图片描述

SpringBean分两种,普通对象和容器对象。普通对象是我们自定义的对象,如xml中的,而容器对象是容器创建运行自身需要的对象。
如:
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值