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();
}
该代码片段的执行结果如图所示:
未完,待续
本文暂时没有评论,来添加一个吧(●'◡'●)