01-Spring源码-源码概述

本文深入介绍了Spring框架的核心概念,包括其作为一个生态的扩展性特点、IOC(控制反转)及AOP(面向切面编程)的基本原理。详细阐述了通过XML配置文件获取Bean的过程,并解析了Spring IOC的工作机制。
摘要由CSDN通过智能技术生成

spring 是什么

spring是框架,是一个生态,具有扩展性
spring主要包含两个点IOC、AOP
IOC:控制反转,里面包含了DI依赖注入,
IOC容器是一个容器,是用来存放对象

在这里插入图片描述
spring 怎么通过xml获取bean

# bean.xml
<bean id=xxx class=xxx init-method=xxx>
	<property name=xxx value=xxx/>
	<property name=xxx ref=xxx/>
</bean>
<bean id=xxx class=xxx init-method=xxx>
	<consturct-arg name=xxx value=xxx/>
	<consturct-arg name=xxx ref=xxx/>
</bean>
//获取bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
XXX xxx = context.getBean(XXX.class);
xxx.getMethod();//调用某个方法

SpringIOC的原理

在这里插入图片描述

  1. 创建Beanactory, DefaultListableBeanFactory
  2. 加载配置文件,将配置文件的信息通过BeanDefinitionReader读取为BeanDefinition信息对象
  3. 然后通过BeanPsotProcess的一系列后置增强处理,常用的是PlaceHolderPostProcessor(替换占位符)
  4. 再通过反射的方式将BeanDefinition实例化为bean对象,这个时候仅仅是在堆中开辟了一个内存空间,对象的属性值都是默认的
  5. 再将bean对象进行初始化,(属性赋值、处理aware回调、beanPostProcessor的前置处理(beafore)、处理init-method的方法、处理beanPostProcessor的后置处理(after))
  6. 初始化完成,得到一个完整的bean,放入到容器中,供容器后续的使用getBean();
  7. 最终关闭容器,销毁bean对象

容器

在这里插入图片描述

容器使用来存储bean对象的,其本质上就是一个map,这里由三个map,存放bean对象,分别对应容器的三级缓存。

对象

在这里插入图片描述
对象的创建完成大致分为2步

  1. 实例化bean对象
    在内存中开辟一块空间,对象的各个属性值都是默认的
  2. 初始化bean对象
    给对象赋值、进行前置增强、执行init-method方法、进行后置增强

后置处理器(增强器)

在这里插入图片描述
主要是bean工厂的增强器,主要用来增强BeanDefinition
bean的增强器,增强bean对象

Aware接口是干嘛的

当容器创建的bean对象进行具体操作的时候,如果需要容器的其他对象,这个时候需要实现相应的Aware接口,来满足具体的需求

对象分类

  1. 容器对象:容器内置的对象
  2. 普通对象:自定义的对象

不同阶段如何知道处理不同的工作

观察者模式:主要包含监听器、监听事件、广播器

接口

  1. BeanFactory
  2. Aware
  3. BeanDefinition
  4. BeanDefinitionReader
  5. BeanPostProcessor
  6. BeanFactoryPostProcessor
  7. Environment
    StandardEnvironment : System.getEnv()
    System.getProperties()
    当完成整个程序的加载之后,会运行很多系统的属性值,将其添加到当前的对象中,后续程序运行时,直接从当前对象中获取。
  8. FactoryBean : 提供了三个方法
    • getObject()
    • getObjectType()
    • isSingleton()

BeanFactory 和 FactoryBean的区别

都是用来创建对象的
区别:

  • BeanFactory:当使用BeanFactory进行创建时,必须要有完整的创建过程,这个过程是由Spring来管理控制的
  • FactoryBean:使用FactoryBean只需要调用getObject()就可以返回具体的对象,整个对象创建过程是由自己控制的,灵活。

视频来自某码MCA系列课,需要的可加
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龘龍龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值