【无标题】

spring-启动源码解析

之前看过很多次spring的源码,一直想着要输出一下,却一直懒得动笔。最近终于确定了大致目标和方向,也给自己定了几个除开工作外的重点事项。有了明确的方向,有些东西想清楚了,才能够静下心来搞技术,写写博客,不然总是会怀疑或者被打断。也是逼着自己理清思路的一个过程。

开始动工!

启动一个最简的spring项目,分析一个spring的启动过程,需要以下maven配置:

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.11.RELEASE</version>
 </dependency>

国内可用的maven仓可自行百度,常用的包都可以下载到,但不排除很多包都拉不到的情况,毕竟免费的服务往往都是有缺陷的,之前试过很多远程仓都无功而返,实在不行就只能自己找jar包,然后maven文件指定本地jar包路径了。

我用的是以下配置:

<mirrors>
   <mirror>
    <id>ui</id>
    <name>Mirror from alibaba</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>

一个最简单的demo开始分析

要分析spring的启动过程,我们可以从以下最简的demo分析起:

application.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <bean id="demo2" class="com.blog.Demo2" >
    </bean>

    <bean id="demo" class="com.blog.Demo" >
        <property name="demo2"  ref="demo2"> </property>
    </bean>
</beans>

Demo Demo2代码块:
在这里插入图片描述
在这里插入图片描述
Test启动类:
在这里插入图片描述
通过以上这些步骤,我们运行Test的main方法,就可以启动一个spring容器了,main方法中这段代码的运行,就包含了整个spring的启动最核心过程,无论是基于web的spring项目,还是微服务的springboot,其实核心都是在这里面,只不过是额外添加了一些其他的功能而已,比如自动装箱,比如内嵌tomcat,比如基于注解的额外的BeanPostProcessor之类的,但是万变不离其宗,我们只要掌握了最关键的东西,对于扩展的上手就会非常快。

spring的核心启动过程分析

通过以上Test启动类的第一行代码:

 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application3.xml");

我们跟进去这一行代码,最终可以看到以下逻辑:
在这里插入图片描述

这里的refresh方法就是整个spring启动的核心所在,继续跟进去可以看到有几大步骤:
在这里插入图片描述

我们逐步来解释下每一个步骤,这里我们暂时先不理会spring复杂的继承体系和beanfactory和ApplicationContext等的关系,这个适合后面再讲,不然容易把人整懵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值