框架 - Spring 源码一步步深入(一)

引文

很多人都想看spring源码,但是spring模块太多了,翻开一开头皮发麻,然后就放弃了,这里我带领大家一起看spring源码,推荐从ioc看起,spring ioc源码怎么看?我们一定要先找到一个头,最简单的办法就搞个demo,一层一层点进去看。

spring 模块

spring-aop
spring-aspects
spring-beans
spring-context
spring-context-indexer
spring-context-support
spring-core
spring-expression
spring-instrument
spring-jcl
spring-jdbc
spring-jms
spring-messaging
spring-orm
spring-oxm
spring-test
spring-tx
spring-web
spring-webflux
spring-webmvc
spring-websocket

先从最基本的spring ioc开始,我们先建一个简单demo
接口

public interface UserService {
    /** 方法 */
    void show();
}

实现

public class UserServiceImpl implements UserService {
    @Override
    public void show() {
        System.out.println("UserServiceImpl - show");
    }
}

Spring配置

路径:resources/application.xml


    

测试类

public class TestMain {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
        UserService userService = context.getBean(UserService.class);
        userService.show();
    }
}

这里使用ClassPathXmlApplicationContext来启动ioc容器,我们比较关心它主要做了什么事。ClassPathXmlApplicationContext在初始化时,先初始父类,然后调用父类refresh()方法,refresh()中有一系列操作
正常
1、prepareRefresh(); 准备工作
2、obtainFreshBeanFactory(); 解析配置文件组装bean定义
3、prepareBeanFactory(beanFactory); 设置BeanFactory的类加载器
4、postProcessBeanFactory(beanFactory); 埋点初始化,可以在初始化前做一些操作
5、invokeBeanFactoryPostProcessors(beanFactory); 调用BeanFactoryPostProcessor
6、registerBeanPostProcessors(beanFactory); 注册BeanPostProcessor 的实现类
7、initMessageSource(); 国际化
8、initApplicationEventMulticaster(); 初始化ApplicationContext 的事件广播器
9、onRefresh(); 具体的子类可以在这里初始化一些特殊的 Bean
10、registerListeners(); 注册事件监听器
11、finishBeanFactoryInitialization(beanFactory); 初始化所有的beans(lazy-init 的除外)
12、finishRefresh(); 广播事件,ApplicationContext初始化完成

异常
1、destroyBeans(); 销毁已经初始化的Beans
2、cancelRefresh(ex); 设置活动标志false

最后
resetCommonCaches(); 清理缓存

后面章节我们详细讲解所有类和方法


你可能感兴趣的:(框架 - Spring 源码一步步深入(一))