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结束