一,控制反转
控制反转是一个对象创建和依赖管理的设计模式。原来对象是由开发者来进行控制的,有了spring后,可以把对象交给spring来帮我们管理。使用IOC时,直接告诉框架,我需要哪些东西,然后spring框架创建,然后我们再拿出来用就行。
IOC创建对象的方式:基于XML(少的很)和基于注解(配置类,扫描包)
DI依赖注入(控制反转的具体表现)
把对应的属性的值注入到具体的对象中,@Autowired完成属性注入
基于XML:xml通过解析+反射创建对象。开发者把需要的对象在 XML 中进行配置,Spring 框架读取这个配置文件,根据配置文件的内容来创建对象。比较麻烦。
基于注解:
1,通过配置类:用一个java类来替代XML文件,把在XML中配置的内容放到配置类中
新建一个配置类,加@Configuration注解,这个类就相当于整个XML文件。这个类里面创建一个方法,就对应xml中的bean,返回对象即可。方法上加@Bean注解,让spring可以调用这个方法,将这个方法返回的对象存到IOC里面
怎么获取:Bean的名称默认是方法名,也可以通过@Bean改
感觉还是比较麻烦,写的东西太多了
2,扫包+注解
不再依赖XML和配置类,直接将bean的创建交给目标类,在目标类添加注解来创建
直接给类加注解,@Component注解告诉spring框架,这个类要被注入到IOC
怎么用:加载IOC容器,指定包名扫包,然后直接就可以取Bean
可以实现依赖注入
依赖注入,就是一个类里面有别的类,一个对象里有其他对象,那我在这个里面的对象上加个@Autowired自动注入注解:在IOC容器里找到对应Bean,再赋值给里面的类
@Autowired:默认通过类型注入,所以在类里面叫啥名都能取出。如果要通过名字去找,那就加@Qualifier注解:表示要找名字叫啥的bean
-
IOC容器本体在堆里面
-
Bean定义存储在方法区+堆里
-
BeanDefinition存储在堆内存
-
Bean实例存储在堆内存(单例池(
singletonObjects)) -
IOC容器实例、Bean实例在堆里
-
Bean类元数据在方法区
-
IOC容器本身是堆内存中的一个特殊对象
-
所有单例Bean实例存储在容器的
singletonObjects(堆内存) -
类定义等元数据存储在方法区(Metaspace)
二,容器
容器用来存放对象,使用map结构来存放,在spring中一般存在三级缓存(循环依赖问题),单例池(singletonObjects)存储和获取完整bean对象(涉及到bean生命周期,bean生命周期全是由容器进行管理)。
Bean对象是指那些由Spring容器实例化、配置和管理的对象,这些对象的生命周期完全由Spring容器控制。从创建到使用销毁都是由容器来管理的。
总说:

分说:容器创建
容器创建
1、准备好bean容器:一般聊ioc容器的时候要涉及到容器的创建过程(beanFactory,DefaultListableBeanFactory,容器最上层有个接口叫beanFactory,最普遍的调用情况就是DefaultListableBeanFactory,在使用时优先创建当前的bean工厂,创建完后,)优先向向bean工厂中设置一些参数(BeanPostProcessor,Aware接囗的子类)等等属性
2、加载解析bean对象:准备要创建的bean对象的定义信息对象 (beanDefinition),(涉及到xml或者注解的解析过程,解析完成后才能获取完整的bean对象beanDefinition)
3、扩展点:beanFactoryPostProcessor的处理,此处是扩展点(修改bean定义信息),如PlaceHolderConfigurSupport,ConfigurationClassPostProcessor完成具体的功能
4、BeanPostProcessor的注册功能,方便后续对bean对象完成具体的扩展功能
5、通过反射的方式讲BeanDefinition对象实例化成具体的bean对象
6、bean对象的初始化过程(1,填充属性,2,调用aware子类的方法,3,调用BeanPostProcessor前置处理方法,4,调用init-method方法,5,调用BeanPostProcessor的后置处理方法)
7、生成完整的bean对象,通过getBean方法可以直接获取
8、销毁过程
这是我对ioc容器的整体理解
具体的细节就不清楚了,但是spring中的bean都是通过反射的方式生成的,同时其中包含了很多的扩展点(对占位符的处理),比如最常用的对BeanFactory的扩展,对bean的扩展,我们在公司对这方面的 使用是比较多的,除此之外,ioc中最核心的也就是填充具体bean的属性,和生命周期(背一下)
扩展点:扩展点是Spring框架提供的可编程干预点,允许开发者在容器管理的不同生命周期阶段插入自定义逻辑,实现对框架行为的深度定制。

springIOC的底层实现
底层实现:工作原理、过程、数据结构、流程、设计模式、设计思想
主要说你对他的理解和了解过的实现过程。
反射(bean的创建涉及到了),突出工厂的价值(beanfactory),设计模式(会的说,不会的不说),关键的方法(createBeanFactory,getBean,doGetBean,createBean,doCreateBean,createBeanInstance,populateBean说出几个就行,加do的就是实际做事的方法,没加的就是套了一层)

511



被折叠的 条评论
为什么被折叠?



