SpringBoot的学习-第一章入门

思维导图部分

 

1.1 创建项目

项目构建的工具有很多种,个人采用的是eclipse的插件STS(spring Tool Suite),相比maven构建项目,会自动装在spring-boot-starter-parent等相关依赖,免去部分开发上的麻烦,建立一个spring boot项目首先得了解个人当前的JDK版本是否兼容,2.1.3版本的springboot要求的JDK版本也必须要在JDK8以上版本

1.1 新建项目 

 1.2 建立项目中有关的字段

在建立项目过程中,会有很多关于项目的一些字段,通过书本了解到项目中部分重要的字段,我挑出来自己学习+解析,建完表之后会有很多其他不理解的点,在下面会写。

GroupID:该字段声明,该项目所在的公司或组织,表明这个项目的归属地

Artifact:该字段声明,该项目的项目名称,通常代表项目代号

Version:该升段声明,该项目的版本号,通常是系统默认生成的

 

 1.2 重要字段

1.3 pom.xml相关依赖

由于个人是用插件STS建立的项目,所以部分步骤不需要个人去手动导入,但为了加深印象,利用maven项目去建立springboot项目时,不可避免的就是去pom.xml的配置文件中注入相关的依赖,而这里面核心的依赖有2个,增加完这两个依赖之后,便可以进行一些简单的项目开发了。

1.3.1 spring-boot-starter-parent

用于增加在springboot框架项目的统一父类管理依赖,增加依赖可以使用springboot的相关特性,例如:<dependencies/><version/>等

1.3.2 spring-boot-starter-web

用于在springboot框架下对于web开发场景集成支持的依赖启动器,增加该依赖可以支持spring mvc框架下相关依赖,用以进行web开发,根据我的理解层面的话,它就相当于项目的一个通道,给不支持web开发的项目提供一个项目和web开发的一个渠道

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.5.6</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

 1.3.1 spring-boot-starter-parent

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

1.3.2 spring-boot-starter-web

1.4 项目开发相关注解

注入以上的依赖之后,便可以进行一些简单的项目开发,但开发过程中会有部分不理解的点。

1.4.1 主程序类注解-@SpringBootApplication

@SpringBootApplication
//用于声明整个项目的主程序类为 Itchapter01Application
public class Itchapter01Application {

	public static void main(String[] args) {
		SpringApplication.run(Itchapter01Application.class, args);
	}

}

1.4.1 主程序类注解

利用STS插件建立项目之后,会发现他会自动帮我建一个类,且该类有一个注解@SpringBootApplication,通过书本了解,这一个注解是用于告诉项目,他的主方法类为Itchapter01Application,理解上的话就是整个项目的main()方法在这个类。

1.4.2 主程序类注解运行原理

这是他的作用,但是他真正的运行原理,需要查看他的底层代码。

 1.4.2 底层代码

根据书本的解释,注解@SpringBootApplication,核心注解有三个@SpringBootConfiguration/@EnableAutoConfiguration/@ComponentScan

学过一些spring基础的朋友便很快了解@ComponentScan是个组件包扫描器,将指定包中的注解类自动装配到spring的容器中,但其中的问题在于,他如何获取到指定包的路径?@SpringBootConfiguration/@EnableAutoConfiguration的注解仍需要再去看他们的底层代码才能了解他们本质的作用

 1.4.3 SpringBootConfiguration

通过查看@SpringBootConfiguration的底层代码发现,内部带有一个@Configuration的注解,便大致可以明白了主程序类的运行机制,在Spring框架中的注解@Configuration作用是声明当前类是一个配置类,支持被扫描器扫描到的配置类,通过百度以及查阅书籍明白了,配置注解@Configuration可以将一个或多个@Bean进行统一注册进Spring容器中对其管理,通过运行机制理解就是,一个工厂将项目中需要的组件集中在这个地方,对其进行相关的调配保证工厂的正常运行,那么现在需要的就是获得每一个需要的组件的具体位置,通过@ComponentScan扫描器将每一个组件带来集中管理,而@EnableAutoConfiguration的作用可以大致猜出来了,获取组件的路径,并且将路径指定到扫描器上。

 1.4.4 EnableAutoConfiguration

通过分析@EnableAutoConfiguration底层代码,其重要的注解有@Import@AutoConfigurationPackage,从书籍中翻阅了解注解@Import的作用是向容器中导入注册的所有组件,而需要导入的组件是交给AutoConfigurationImportSelector(自动配置类扫描)所指定的路径决定的,@AutoConfigurationPackage的底层代码拆分来看,也是存在一个@Import注解在里面的,且由Registrar决定导入组件

 1.4.5 AutoConfigurationImportSelector

AutoConfigurationImportSelector类所导入的组件,主要作用是用于筛选过滤掉当前项目环境不需要的自动配置类,通过以上代码的截图分析,他先获取了所有Spring boot提供的自动配置类,通过父类自带的checkExcludedClasses()方法将现阶段获取的自动配置类进行筛选,通过removeAll()方法进行过滤,从而将项目相关的自动配置类返回给扫描器。

 1.4.6 AutoConfigurationImportPackage

 

 1.4.7 Registrar

通过查看这两者底层代码的方法比对,Registrar中registerBeanDefinitions方法通过DeBug模式启动项目,会发现上述代码获取的数据是项目主程序启动类的目录,也就是说@AutoConfigurationPackage的作用是获取主程序启动类所在根目录,从而指定扫描器扫描包的位置。 

通过以上的所有原理分析,大致可以明白SpringBoot项目启动的步骤:

创建项目——注入相关依赖启用对应的服务——声明配置类,获取组件扫描器的服务并为其指定包,将指定包扫描到的组件导入容器-导入容器之前,将筛选过滤后,再进行导入

1.5 创建Web访问的Controller类

创建好项目后,在主程序启动类所在的包下创建一个名称为Controller的包,并且创建类HelloController,编写一个请求处理的方法,代码如下:

import java.util.Date;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
//用于将类作为组件注入到spring容器中,同时将该类方法以json字符串的形式返回
public class helloController {
	
	@GetMapping("/hello")
	//web集成开发中,设置该类的方法路径,并且以GET方式对此方法进行访问
	public String hello() {
		Date date=new Date();
		String welcomeString=date.toLocaleString();
		return "您的访问时间为:"+welcomeString;
	}
}

Controller类中的注解@RestController,以及其hello()方法的注解@GetMapping()

1.5.1 @RestController类 运行原理

1.5.1 RestController

该注解作为一个组合注解,通过分析底层代码可以了解@Controller@ResponseBody是他主要的运行原理,@Controller的作用是声明当前类是作为一个Controller对象(控制层)的组件增加到Spring容器中,而@ComponentScan会扫描到该类并且判断该类使用使用了@RequestMapping处理,而@ResponseBody则是将该类以json字符串的类型返回,而@GetMapping的作用,则是触发@Controller类的@RequestMapping,设置访问路径并且限定访问方式为Get,从而实现对于web服务的开发,而通过运行程序,最终得到的结果截图如下:

 1.5.2 运行结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值