【手撕spring源码】spring源码编译



环境准备

JDK11、Spring Framework 5.2.0 release

编译

修改build.gradle

在这主要将仓库修改为阿里云镜像(在开头buildscript 中添加,笔者一开始下载的是5.3.22版本,该文件里没有这个字段),gradle虽然没手动安装但是在编译时可直接快速下载。

buildscript {
	repositories{
		maven { url'https://maven.aliyun.com/repository/public/' }
		maven { url'https://maven.aliyun.com/repository/jcenter' }
	}
	dependencies {
		classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16'
		classpath 'io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE'
	}
}

编译

官网教程地址Build from Source
根据官网的相关说明,最下面有Eclipse和IntelliJ IDEA的导入方法,但是JDK版本要看你用的spring版本对应的要求,官网的应该是显示最新的,版本不一致会预编译失败。

  1. 进入spring根目录运行gradlew :spring-oxm:compileTestJava
  2. 通过idea(File ->New -> Project from Existing Sources -> Navigate to directory ->Select build.gradle)导入项目
  3. 移除spring-aspects模块,移除后idea重新构建就OK了

测试

创建一个下项目测试是否能将其他模块作为jar包导入

项目结构如下

在这里插入图片描述

定义主类Entrance

public class Entrance {
	public static void main(String[] args) {
		System.out.println("Hello world!");
		String xmlPath = "E:\\Git\\Spring-test\\spring-framework-5.2.0.RELEASE\\springdemo\\src\\main\\resources\\spring\\spring-config.xml";
		ApplicationContext applicationContext = new FileSystemXmlApplicationContext(xmlPath); //返回spring容器
		WelcomeServcie welcomeServcie = (WelcomeServcie) applicationContext.getBean("welcomeService");
		welcomeServcie.sayHello("第一个sping");
	}
}

定义接口WelcomeServcie

public interface WelcomeServcie {
	String sayHello(String name);
}

定义接口实现类WelcomeServcieimpl

public class WelcomeServcieimpl implements WelcomeServcie {
	@Override
	public String sayHello(String name) {
		System.out.println("欢迎!:"+name);
		return "success";
	}
}

配置xml

导入已有的xml文件,将定义的接口类放进bean容器中

<?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 id="welcomeService" class="com.imooc.service.impl.WelcomeServcieimpl"/>
</beans>

修改项目中的build.gradle

导入spring-context,在dependencies添加一行就行,这里的compile方法在后续的版本中弃用了,

plugins {
    id 'java'
}

group 'org.springframework'
version '5.2.0.RELEASE'

repositories {
    mavenCentral()
}

dependencies {
    compile(project(":spring-context"))
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}

输出

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC使用反射机制来实现请求的处理和方法的调用。在Spring MVC中,使用注解来标记控制器类和处理请求的方法。通过利用反射,Spring MVC能够在运行时动态地获取控制器类和方法的相关信息,并根据请求的URL来确定要调用的方法。 当一个请求到达Spring MVC应用程序时,Spring MVC会解析请求的URL,并根据URL中的路径信息找到对应的控制器类和方法。通过反射,Spring MVC可以获取到这个控制器类的实例,并调用对应的方法来处理请求。在调用方法之前,Spring MVC还可以根据方法上的注解来进行一些预处理工作,比如参数绑定和验证等。 反射机制使得Spring MVC能够灵活地处理各种不同的请求,并动态地调用对应的方法。这种方式使得开发者能够更加方便地编写和维护控制器类,同时也提高了应用程序的灵活性和可扩展性。 引用内容: Spring Web MVC: Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。 引用:注:本文纯写实现MVC的实现原理,没有使用设计模式等,代码直接复制即可debug调试查看运行流程,相关解释放在文末。 引用:1,Spring Core: Core封装包是框架的最基础部分,提供IOC和依赖注入特性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [反射机制,Spring AOP 底层实现原理,springmvc的工作原理,Spring七大模块](https://blog.csdn.net/tzydzj/article/details/113742970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Spring MVC实现原理(代码模拟呈现MVC反射原理)](https://blog.csdn.net/qq_45251343/article/details/119699273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值