博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring源码 13 IOC refresh方法8
阅读量:37194 次
发布时间:2020-08-01

本文共 1882 字,大约阅读时间需要 6 分钟。

本文章基于 Spring 5.3.15

Spring IOC 的核心是 AbstractApplicationContextrefresh 方法。

其中一共有 13 个主要方法,这里分析第 8 个:initApplicationEventMulticaster

1 AbstractApplicationContext

1-1 初始化应用消息广播器

initApplicationEventMulticaster()
protected void initApplicationEventMulticaster() {    // 获取 Bean 工厂    ConfigurableListableBeanFactory beanFactory = getBeanFactory();    if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {        this.applicationEventMulticaster =            beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);        if (logger.isTraceEnabled()) {            logger.trace("Using ApplicationEventMulticaster [" + this.applicationEventMulticaster + "]");        }    }    else {        // 定义应用事件多播器        this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);        // 注册单例        beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);        if (logger.isTraceEnabled()) {            logger.trace("No '" + APPLICATION_EVENT_MULTICASTER_BEAN_NAME + "' bean, using " +                         "[" + this.applicationEventMulticaster.getClass().getSimpleName() + "]");        }    }}

获取 Bean 工厂注册单例 在前面已经分析过,这里不再分析。

1-2 定义应用事件多播器

SimpleApplicationEventMulticaster(beanFactory)

2 SimpleApplicationEventMulticaster

public SimpleApplicationEventMulticaster(BeanFactory beanFactory) {    // 设置 Bean 工厂    setBeanFactory(beanFactory);}

2-1 设置 Bean 工厂

public void setBeanFactory(BeanFactory beanFactory) {   if (!(beanFactory instanceof ConfigurableBeanFactory)) {      throw new IllegalStateException("Not running in a ConfigurableBeanFactory: " + beanFactory);   }   this.beanFactory = (ConfigurableBeanFactory) beanFactory;   if (this.beanClassLoader == null) {      this.beanClassLoader = this.beanFactory.getBeanClassLoader();   }}

转载地址:http://eupwwy.baihongyu.com/

你可能感兴趣的文章
关于MYSQL的Replication的初步学习
查看>>
如何配制MySql的Replication
查看>>
使用mysqldump导出(备份)MySQL数据
查看>>
Callables and Futures
查看>>
【FastDFS分布式文件系统之二】:FastDFS小文件上传性能测试及Python客户端上传操作
查看>>
Python Numpy的简单使用
查看>>
高级SQL语句简单举例
查看>>
Java对IpAddress排序
查看>>
TortoiseSVN回滚到历史版本并用Jenkins部署
查看>>
各种语言代码规范
查看>>
【FastDFS分布式文件系统之三】进程监控及僵死恢复
查看>>
【Ceph学习之一】Centos7上部署Ceph存储集群以及CephFS的安装
查看>>
git使用笔记
查看>>
Java对Mysql的简单数据操作
查看>>
分布式系统的思考及CAP理论
查看>>
Python Requests模块
查看>>
云存储简介
查看>>
返回结果的HTTP状态码
查看>>
Linux网络流量查看工具
查看>>
第一个Flask程序
查看>>