程序员开发实例大全宝库

网站首页 > 编程文章 正文

SpringBoot源码解析-初探(spring boot源码分析)

zazugpt 2024-08-30 04:37:40 编程文章 19 ℃ 0 评论

SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置,这个大家使用SpringBoot框架应该不陌生了。

废话不多说,现在开始对SpringBoot进行搭建,首先创建一个Maven工程,引入如下依赖:

<!--SpringBoot父pom依赖,用于定义所有依赖对应的版本-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

然后,java目录下创建StudyApplication启动类,并加上@SpringBootApplication注解,效果如下:

然后,分别创建HelloWorldService和HelloController类,两个类的代码片段分别如下:

@Service
public class HelloWorldService {

    public String hello(String name) {
        return "hello, " + name;
    }
}
@RestController
public class HelloController {

    @Autowired
    HelloWorldService helloWorldService;

    @RequestMapping("/hello/{name}")
    public String hello(@PathVariable("name") String name) {
        return helloWorldService.hello(name);
    }
}

然后,运行StudyApplication类的Main方法启动SpringBoot,启动完成后,在浏览器上输入如图所示结果,表示我们搭建的Web项目启动成功了。

下面开始我们SpringBoot源码之旅,首先从StudyApplication类的Main方法开始看起:

SpringApplication.run(StudyApplication.class, args);

点击进入run方法内部进行查看,会进入如下代码片段:

public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) {
  return new SpringApplication(primarySources).run(args);
}

进入SpringApplication的构造器方法中,会进入如下代码片段:

public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
	this.resourceLoader = resourceLoader;
	Assert.notNull(primarySources, "PrimarySources must not be null");
	this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
	// 判断web应用的类型,即是web环境,或非web环境,或reactive环境
  // 查看方法内部,可以发现是通过判断当前项目中是否包含各种class类来判断是什么应用类型
  this.webApplicationType = WebApplicationType.deduceFromClasspath();
	// 获取项目所有的初始化器,后面会单独讲解其作用
  setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
	// 获取项目所有的监听器,后面会单独讲解其作用
  setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
	// 获取main方法对应类的Class对象
  this.mainApplicationClass = deduceMainApplicationClass();
}

该代码片段的执行结果如图所示:

未完,待续

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表