Spring的深入浅出--11.IOC容器底层封装Bean的数据结构及IOC容器的底层创建流程及事件监听发布

在spring的IOC容器中,我们是采用什么数据结构来封装Bean的呢?

我们可以先假设:
因为bean是不可重复的,所以应该采用不可重复的数据结构来存储,这样的话应该采用的是HashSet和hashmap,但是hashset存储的只是对象,而hashmap存储键值对,所以我感觉还是hashmap

开始证明自己的想法:

首先我是从从ApplicationContext入手的

 反正我一下没有找到在哪,后来我用另外一个BeanDefinitionRegistry:该类是管理bean的

看到getBeanDefinitionCount()

 

查看它的子实现

 

 

找到了底层存储采用的是ConcurrentHashMap,一个线程安全的HashMap实现的。

 

 

 

IOC容器的底层创建:

1.ioc创建对象

2.refresh()-》invokeBeanFactoryPostProcessors(beanFactory);

 

3.从容器中获取所有的BeanDefinitionRegistryPostProcessor组件。

 

 

1.依次触发所有的postProcessBeanDefinitionRegistry()方法

2.再来触发postProcessBeanFactory()方法BeanFactoryPostProcessor;

 

 

4.再来从容器中找到BeanFactoryPostProcessor组件,然后依次触发PostProcessBeanFactory()方法 

 

 

ApplicationListener:监听容器中发布的事件。事件驱动模型开发;

需要继承ApplicationListener<E extends ApplicationEvent>

    监听ApplicationEvent及其下面的子事件。

创建MyApplicationListener继承ApplicationListener<ApplicationEvent>

打印输出的事件

运行控制台打印:

 

 通过注解方式实现事件监听接口

运行查看打印

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值