spring bean创建总览 1

本文详细解释了Spring中的IoC容器如何通过XML配置加载Bean,涉及BeanFactory、ApplicationContext、beanDefinitionReader、beanPostProcessor、FactoryBean等关键概念,以及AOP和观察者模式在Bean初始化过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 开始

 

这是一个总图

下边慢慢看

 我们最基础的写的方式就是xml的方式去写

 像这样,

而我们会通过applicationContext的方式去获得我们的bean ,我其中一篇博客就写到了applicationContext他的父类就是beanFactory

 但是中间的是怎么样处理的呢?

 因为你获取getbean 的时候要么是bean.class 要么就是这个  bean的名字。所以思考应该是在容器中用map去存放的这个bean。和我们创建bean的一些东西,等等

 

我们可以知道,我们可以通过xml和properties 还有yaml定义一些bean定义信息(虽然我们很少将bean的定义信息写成properties和还有yaml文件)但是 其实这些文件解析成bean的时候会解析成统一的beanDefinition。这时候会有一个解析处理环节。 而这个解析环节有一个解析处理环节就是beanDefinitionReader。然后beanDefiniton会通过反射去实例化。

bean工厂是一个容器的跟接口和入口 ,反射的代码也是在bean工厂搞的

bean工厂就是一个核心容器

 我么需要postProcessor  后置处理器。

 

 我们拿到beanfactory之后进型增强,你的那个 ,还有上边的那个动态修改属性值的问题。

我们就有一个placeholder(占位符)处理的接口。

 

 在源码中经常会遇到一个populate的方法,这个方式其实就是填充属性的

Aware 接口讲解一下:

我想让a对象有一个获得当前容器的这样一个功能没那莫我就让他a这个类趋势实现applicationcontextaware接口,并实习其中的方法就行如

  然后在提供一个get方法就ok了。

比如说我需要知道我的beanname这时候我就可以继承beannameaware

需要框架啥组件就实现对应得aware接口就行。

你做二次开发得时候这时候就需要了

在这个方法里边就会有一个方法

 

AbstractApplicationContext 有这么一个抽象类,其中有一个方法叫reflash。

里边有

 各种忽略,那么这一块呢还能不仅能忽略接口还能忽略类型。这里有了解即可以后在说。

beanpostpocesser 这里有个前之有个后置,两个方法,他有一个实现类,    

走到最后,你会看到

所以这一块就是aop 。

 这个图就是说明了最简单的bean创建,仅仅是bean创建时是怎么可以扩展的那一部分。不完整

 

1结束

 2开始

 

 这个顺序为啥是这样得        

 人家就是这莫遵循得,所以在学tomcat源码得时候好像也是这样,一层一层得都去遵循了自己得这个生命周期。

那么在bean初始化时候如上上图,我们不是知道他分为几个阶段吗?在每个阶段完成之后我们就让他输出他已经完成了。那么这个工作怎么做,这就需要 观察者模式了

 一些重点得接口

还有一个beanDefinitionRegister 这个主要是对beandefinition增删改查得 。

一个小小得面试题

首先,Spring 里面的核心功能是 IOC 容器,所谓 IOC 容器呢,本质上就是一个 Bean
的容器或者是一个 Bean 的工厂。
它能够根据 xml 里面声明的 Bean 配置进行 bean 的加载和初始化,然后 BeanFactory
来生产我们需要的各种各样的 Bean。

BeanFactory 是所有 Spring Bean 容器的顶级接口,它为 Spring 的容器定义了一
套规范,并提供像 getBean 这样的方法从容器中获取指定的 Bean 实例。
BeanFactory 在产生 Bean 的同时,还提供了解决 Bean 之间的依赖注入的能力,
也就是所谓的 DI。
FactoryBean 是一个工厂 Bean,它是一个接口,主要的功能是动态生成某一个类型的
Bean 的实例,也就是说,我们可以自定义一个 Bean 并且加载到 IOC 容器里面。
它里面有一个重要的方法叫 getObject(),这个方法里面就是用来实现动态构建 Bean
的过程。
Spring Cloud 里面的 OpenFeign 组件,客户端的代理类,就是使用了 FactoryBean
来实现的。

a是由afactiorybean调用getobject生成得

容器创建得时候不会有a ,他不会遵循bean得生命周期。

 

 感悟

学习接口得作用,以及他设计得思想。

2结束

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值