1. 前记
之前总是杞人忧天,思考写博客的时候到底在写什么,现在都2020年了,网上有一大堆类似的博客
现在再想想,首先博客是给自己看的,要对自己负责。至于之后再说
我写这个模块的初衷就是:让自己懂Spring IOC,懂到不惧怕面试官对于这方面的任何问题,我会列一系列问题,如果都明白,那么目的就达成了
「自问自答」环节
-
谈谈对spring中bean的理解
-
bean就是在spring运行最开始,初始化的对象,这些对象(bean)初始化后都放在spring容器中,供用户去随时调用
-
从调用的角度来说,可以分成:单例(默认),多例
-
生成bean对象的过程为:
-
找:框架默认的bean、注解标识的bean
先从缓存中 、根据name找、到父容器中找、
-
初始化:根据每个bean不同的配置,依赖,一般是根据bean的类名路径,来初始化,如果依赖于其他bean,先初始化其他bean,再填充属性,最后放入容器中
-
-
-
循环依赖是什么,怎么解决
- 在初始化bean的依赖的时候,如发现a->b b->a这种依赖关系,a b 的初始化都需要对方的实例bean才能完成初始化
- 解决:Spring IOC 容器源码分析(四)- 循环依赖的解决办法–总结
-
bean的创建流程
-
构造bean原始对象的三种方法,俩种策略
2. 如何下手
有了目标,不如就从我目前看的博客开始

3. IOC概念

4. IOC部分特性介绍
4.1 autowire


通过上图,对autowire有了新的理解,之前用这个注解很多次,如果写成XML格式,就是上述所示。我经常使用这个注解的时候,就会报错,说读不到,那就是应该我要取的类还没在容器中
4.2 FactoryBean
factorybean是一种可以产生 bean 的 bean

?????????????
这个例子就很绕,折腾半天,为了表明实现FactoryBean的Bean,既可以获取到真正要获取的bean(Hello)还可以获取到他本身(HelloFactory) 让我很疑惑,为什么要这样做呢,像上面直接把一个普通得类放容器不就好了吗?希望后续可以揭晓
以上内容我写了40分钟 我是猪
4.3 factory-method
factory-method 可用于标识静态工厂的工厂方法(工厂方法是静态的)
我觉得没啥重要,不写了
4.4 lookup-method
这里,主要是觉得这个例子比较有意思
1
2
3
4
<bean id="news" class="xyz.coolblog.lookupmethod.News" scope="prototype"/>
<bean id="newsProvider" class="xyz.coolblog.lookupmethod.NewsProvider">
<property name="news" ref="news"/>
</bean>
这里直接通过代码来说需求,上述配置文件就是一个单例的 newsProvider 需要引入一个非单例的 news
按照这样配置,newsProvider中的news是不会变的
解决的俩种方法:


4.5 depends-on

4.6 BeanPostProcessor
BeanPostProcessor 是 Spring 框架的一个扩展点,通过实现 BeanPostProcessor 接口,我们就可插手 bean 实例化的过程。比如大家熟悉的 AOP 就是在 bean 实例后期间将切面逻辑织入 bean 实例中的,AOP 也正是通过 BeanPostProcessor 和 IOC 容器建立起了联系
?????????? 具体怎么联系的,想不到,期待后续

总结一下这一小节,可以看成是对XML文件中的配置项多了几个了解,不同的配置有什么用,比如
alias 给bean创建别名
autowire 自动(根据bean的name等)引入依赖
factory-method 标识静态方法
lookup-method 让引入的非单例类每次都是全新的
depends-on 定义bean注册的顺序
FactoryBean 我认为是一种模式,但还不知道有啥用
ApplicationContextAware 接口 获取容器中信息的入口
BeanPostProcessor 定制化bean生成前后的动作
5 写在最后
整篇文章写下来,会让我觉得很乱,从视觉上来说,这篇博客从根本上来说没有任何价值,对我只是让我更加记忆深刻,也为我后续的写作积攒经验
工作一年俩年三年,我都在混沌(第三次出现了。。)中度过,回首往事,没有什么值得去叙说的,写文章应该是个不错的开始
附录