码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-04-15 21:33:18      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:alt   coding   mes   方法   can   很多   multicast   aop   show   

技术图片

引文

很多人都想看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
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd"
       default-autowire="byName">
    <bean id="userService" class="com.user.impl.UserServiceImpl"/>
</beans>

测试类

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 源码一步步深入(一)

标签:alt   coding   mes   方法   can   很多   multicast   aop   show   

原文地址:https://www.cnblogs.com/yuanjiangnan/p/12708210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!