Spring 源码学习

本文最后更新于:7 个月前

Spring 源码学习

一、搭建阅读环境

1 拉取源码

image-20211029215505730

注意:Git 拉取后直接用 IDEA 打开,不要着急构建项目,先配置好 Gradle。

2 配置 Gradle 国内镜像加速

image-20211029215614490

除了框出的镜像,其他镜像有一些问题,比如没有某个版本的依赖,下载速度过慢。

3 添加缺失的 jar 包

缺失原因:

为了避免第三方 class 的冲突,Spring 把最新的 cglib 和 objenesis 给重新打包(repack)了,它并没有在源码里提供这部分的代码,而是直接将其放在 jar 包当中,这也就导致了我们拉取代码后出现编译错误。那么为了通过编译,我们要把缺失的 jar补回来。

需要将 build/libs/spring-cglib-repack-3.3.0.jar 文件复制到外面 libs 目录( 需要手动创建)

image-20211030002259440

二、测试 Spring

1 新建 spring-mytest 测试模块

image-20211030004737472

2 编写测试类和 xml 文件

2.1 导入 spring-context 模块

image-20211030004812976

2.2 新建 User 类

package com.pncalbl.test;

/**
 * @author pncalbl
 * @date 2021/10/30 0:35
 * @e-mail pncalbl@qq.com
 * @description
 **/

public class User {
   private String username;
   private String address;

   public String getUsername() {
      return username;
   }

   public void setUsername(String username) {
      this.username = username;
   }

   public String getAddress() {
      return address;
   }

   public void setAddress(String address) {
      this.address = address;
   }

   @Override
   public String toString() {
      return "User{" +
            "username='" + username + '\'' +
            ", address='" + address + '\'' +
            '}';
   }
}

2.3 新建 beans.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
   
   <bean class="com.pncalbl.test.User" id="user">
      <property name="address" value="www.pnca.com"/>
      <property name="username" value="pncalbl"/>
   </bean>

</beans>

2.4 新建测试类

package com.pncalbl.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author pncalbl
 * @date 2021/10/30 0:44
 * @e-mail pncalbl@qq.com
 * @description
 **/

public class Main {
   public static void main(String[] args) {
      ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:beans.xml");
      User bean = context.getBean(User.class);
      System.out.println("User = " + bean);
   }
}

3 运行测试类

image-20211030005036922


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!