Spring Boot (一) Spring Boot 基础介绍(Springboot 的特征、创建项目的方式、配置文件、核心注解)

Springboot 的特征、创建项目的方式、配置文件、核心注解

一、 Spring Boot  介绍

1 什么是 Spring Boot

Spring Boot 是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了 Spring 众多框架中所需的大量且繁琐的配置文件,所以 Spring Boot 是一个服务于框架的框架,服务范围是简化配置文件。所以从本质上来说,Spring Boot 其实就是 Spring框架的另一种表现形式。

2 Spring Boot  特征

  • 使用 Spring Boot 可以创建独立的 Spring 应用程序
  • 在Spring Boot中直接嵌入了Tomcat、Jetty、Undertow等Web容器,所以在使用SpringBoot
  • 做 Web 开发时不需要部署 WAR 文件
  • 通过提供自己的启动器(Starter)依赖,简化项目构建配置
  • 尽量的自动配置 Spring 和第三方库
  • 提供了生产就绪特征,如:度量指标,运行状况检查和外部化配置
  • 绝对没有代码生成,也不需要 XML 配置文件

3 Spring Boot  版本介绍

SNAPSHOT:快照版,即开发版。

CURRENT:最新版,但是不一定是稳定版。

GA:GeneralAvailability,正式发布的版本。

二、 于 创建基于 Spring Boot  的项目

1 通过官网创建项目

2 通过 IDEA  的脚手架工具创建

3 通过 IDEA 的 的 Maven  项目创建

修改 POM 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.bjsxt</groupId>
	<artifactId>springbootdemo3</artifactId>
	<version>1.0-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<properties>
	<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

 

三、 Spring Boot  项目结构介绍

1 POM  文件

1.1 继承

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

Spring Boot 的父级依赖,只有继承它项目才是 Spring Boot 项目。

spring-boot-starter-parent 是一个特殊的 starter,它用来提供相关的 Maven 默认依赖。使用它之后,常用的包依赖可以省去 version 标签。

1.2 依赖

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

启动器依赖

1.3 插件

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
</build>

spring-boot-maven-plugin 插件是将 springboot 的应用程序打包成 jar 包的插件。将所有应用启动运行所需要的 jar 包都包含进来,从逻辑上将具备了独立运行的条件。当运行"mvn package"进行打包后,使用"java -jar"命令就可以直接运行。

2 启动类

Spring Boot 的启动类的作用是启动 Spring Boot 项目,是基于 Main 方法来运行的。

注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository......),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。

2.1 启动类与启动器区别:

  • 启动类表示项目的启动入口
  • 启动器表示 jar 包的坐标

2.2 创建启动类

/**
*Spring Boot 启动类
*/
@SpringBootApplication
public class SpringBootDemo3Application {
	public static void main(String[] args){
		SpringApplication.run(SpringBootDemo3Application.class,args);
	}
}

3 启动器

Spring Boot 将所有的功能场景都抽取出来,做成一个个的 starter(启动器),只需要在项目里面引入这些 starter 相关场景的所有依赖都会导入进来,要用什么功能就导入什么场景,在 jar 包管理上非常方便,最终实现一站式开发。

Spring Boot 提供了多达 44 个启动器。

spring-boot-starter

这是 Spring Boot 的核心启动器,包含了自动配置、日志和 YAML。

spring-boot-starter-actuator

帮助监控和管理应用。

spring-boot-starter-web

支持全栈式 Web 开发,包括 Tomcat 和 spring-webmvc。

spring-boot-starter-amqp

通过 spring-rabbit 来支持 AMQP 协议(Advanced Message Queuing Protocol)。

spring-boot-starter-aop

支持面向方面的编程即 AOP,包括 spring-aop 和 AspectJ。

spring-boot-starter-artemis

通过 ApacheArtemis 支持 JMS 的 API(Java Message Service API)。

spring-boot-starter-batch

支持 Spring Batch,包括 HSQLDB 数据库。

spring-boot-starter-cache

支持 Spring 的 Cache 抽象。

spring-boot-starter-cloud-connectors

支持 Spring Cloud Connectors,简化了在像 Cloud Foundry 或 Heroku 这样的云平台上连接服务。

spring-boot-starter-data-elasticsearch

支持 ElasticSearch 搜索和分析引擎,包括 spring-data-elasticsearch。

spring-boot-starter-data-gemfire

支持 GemFire 分布式数据存储,包括 spring-data-gemfire。

spring-boot-starter-data-jpa

支持 JPA(Java PersistenceAPI),包括 spring-data-jpa、spring-orm、Hibernate。

spring-boot-starter-data-mongodb

支持 MongoDB 数据,包括 spring-data-mongodb。

spring-boot-starter-data-rest

通过 spring-data-rest-webmvc,支持通过 REST 暴露 Spring Data 数据仓库。

spring-boot-starter-data-solr

支持 Apache Solr 搜索平台,包括 spring-data-solr。

spring-boot-starter-freemarker

支持 FreeMarker 模板引擎。

spring-boot-starter-groovy-templates

支持 Groovy 模板引擎。

spring-boot-starter-hateoas

通过 spring-hateoas 支持基于 HATEOAS 的 RESTful Web 服务。

spring-boot-starter-hornetq

通过 HornetQ 支持 JMS。

spring-boot-starter-integration

支持通用的 spring-integration 模块。

spring-boot-starter-jdbc

支持 JDBC 数据库。

spring-boot-starter-jersey

支持 Jersey RESTful Web 服务框架。

spring-boot-starter-jta-atomikos

通过 Atomikos 支持 JTA 分布式事务处理。

spring-boot-starter-jta-bitronix

通过 Bitronix 支持 JTA 分布式事务处理。

spring-boot-starter-mail

支持 javax.mail 模块。

spring-boot-starter-mobile

支持 spring-mobile。

spring-boot-starter-mustache

支持 Mustache 模板引擎。

spring-boot-starter-redis

支持 Redis 键值存储数据库,包括 spring-redis。

spring-boot-starter-security

支持 spring-security。

spring-boot-starter-social-facebook

支持 spring-social-facebook

spring-boot-starter-social-linkedin

支持 pring-social-linkedin

spring-boot-starter-social-twitter

支持 pring-social-twitter

spring-boot-starter-test

支持常规的测试依赖,包括 JUnit、Hamcrest、Mockito 以及 spring-test 模块。

spring-boot-starter-thymeleaf

支持 Thymeleaf 模板引擎,包括与 Spring 的集成。

spring-boot-starter-velocity

支持 Velocity 模板引擎。

spring-boot-starter-websocket

支持 WebSocket 开发。

spring-boot-starter-ws

支持 Spring Web Services。

spring-boot-starter-actuator

增加了面向产品上线相关的功能,比如测量和监控。

spring-boot-starter-remote-shell

增加了远程 ssh shell 的支持。

spring-boot-starter-jetty

引入了 Jetty HTTP 引擎(用于替换 Tomcat)。

spring-boot-starter-log4j

支持 Log4J 日志框架。

spring-boot-starter-logging

引入了 Spring Boot 默认的日志框架 Logback。

spring-boot-starter-tomcat

引入了 Spring Boot 默认的 HTTP 引擎 Tomcat。

spring-boot-starter-undertow

引入了 Undertow HTTP 引擎(用于替换 Tomcat)。

4 配置文件

Spring Boot 提供一个名称为 application 的全局配置文件,支持两种格式 properteis 格式与 YAML 格式。

4.1Properties  格式

配置 Tomcat 监听端口

server.port=8888

4.2YAML  格式

YAML 格式配置文件的扩展名可以是 yaml 或者 yml。

4.2.1 基本格式要求

  • 大小写敏感
  • 使用缩进代表层级关系
  • 相同的部分只出现一次

配置 Tomcat 监听端口

server:
  port: 8888

4.3 配置文件存放位置

  • 当前项目根目录中
  • 当前项目根目录下的一个/config 子目录中
  • 项目的 resources 即 classpath 根路径中
  • 项目的 resources 即 classpath 根路径下的/config 目录中

4.4 配置文件加载顺序

4.4.1 不同格式的加载顺序

如 果 同 一 个 目 录 下 , 有 application.yml 也 有 application.properties , 默 认 先 读 取application.properties。

如果同一个配置属性,在多个配置文件都配置了,默认使用第 1 个读取到的,后面读取的不覆盖前面读取到的。

4.4.2 不同位置的加载顺序

4.4.2.1  当前项目根目录下的一个/config  子目录中( 最高)

config/application.properties

config/application.yml

4.4.2.2  当前项目根目录中( 其次)

application.properties

application.yml

4.4.2.3  项目的 resources 即 即 classpath  根路径下的/config  目录中( 一般)

resources/config/application.properties

resources/config/application.yml

4.4.2.4  项目的 resources 即 即 classpath  根路径中( 最后)

resources/application.properties

resources/application.yml

4.5 配置文件中的占位符

4.5.1 占位符语法

语法:${}

4.5.2 占位符作用

  • "${}"中可以获取框架提供的方法中的值如:random.int 等。
  • 占位符可以获取配置文件中的键的值赋给另一个键作为值。

4.5.3 生成随机数

${random.value} - 类似 uuid 的随机数,没有"-"连接

${random.int} - 随机取整型范围内的一个值

${random.long} - 随机取长整型范围内的一个值

${random.long(100,200)} - 随机生成长整型 100-200 范围内的一个值

${random.uuid} - 生成一个 uuid,有短杠连接

${random.int(10)} - 随机生成一个 10 以内的数

${random.int(100,200)} - 随机生成一个 100-200 范围以内的数

4.6bootstrap  配置文件

4.6.1bootstrap  配置文件介绍

Spring Boot 中有两种上下文对象,一种是 bootstrap, 另外一种是 application, bootstrap是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何 Spring 应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

4.6.2bootstrap  配置文件特征

  • boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载。
  • boostrap 里面的属性不能被覆盖。

4.6.3bootstrap 与 与 application  的应用场景

application 配置文件主要用于 Spring Boot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景。

  • 使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息。
  • 一些固定的不能被覆盖的属性。
  • 一些加密/解密的场景。

5 Spring Boot  的核心注解

5.1@SpringBootApplication

是 SpringBoot 的启动类。

此注解等同于@Configuration+@EnableAutoConfiguration+@ComponentScan 的组合。

5.2@SpringBootConfiguration

@SpringBootConfiguration 注解是@Configuration 注解的派生注解,跟@Configuration注解的功能一致,标注这个类是一个配置类,只不过@SpringBootConfiguration 是 springboot的注解,而@Configuration 是 spring 的注解

5.3@Configuration

通过对 bean 对象的操作替代 spring 中 xml 文件

5.4@EnableAutoConfiguration

Spring Boot 自动配置(auto-configuration):尝试根据你添加的 jar 依赖自动配置你的Spring 应用。是@AutoConfigurationPackage 和@Import(AutoConfigurationImportSelector.class)注解的组合。

5.5@AutoConfigurationPackage

@AutoConfigurationPackage 注解,自动注入主类下所在包下所有的加了注解的类(@Controller,@Service 等),以及配置类(@Configuration)

5.6@Import({AutoConfigurationImportSelector.class})

直接导入普通的类

导入实现了 ImportSelector 接口的类

导入实现了 ImportBeanDefinitionRegistrar 接口的类

5.7@ComponentScan

组件扫描,可自动发现和装配一些 Bean。

5.8@ConfigurationPropertiesScan

@ConfigurationPropertiesScan 扫描配置属性。@EnableConfigurationProperties 注解的作用是使用 @ConfigurationProperties 注解的类生效。

四、 写 编写 HelloWorld

1 创建项目

2 修改 POM  文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.bjsxt</groupId>
	<artifactId>springboothelloworld</artifactId>
	<version>1.0-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.0.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

3 修改 Tomcat  端口

server:
  port: 8888

4 创建启动类

/**
* 启动类
*/
@SpringBootApplication
public class SpringBootHelloWorldApplication {
	public static void main(String[] args){
		SpringApplication.run(SpringBootHelloWorldApplication.class,args);
	}
}

5 创建 Controller

/**
* 处理请求 Controller
*/
@RestController // @Controller+@ResponsBody 直接返回字符串
public class HelloWorldController {
	@RequestMapping("/helloWorld")
	public String showHelloWorld(){
		return "HelloWorld";
	}
}

6 Spring Boot 在 在 Controller  中常用注解

6.1@RestController

@RestController 相当于@Controller+@ResponseBody 注解

如果使用@RestController 注解 Controller 中的方法无法返回页面,相当于在方法上面自动 加 了 @ResponseBody 注 解 , 所 以 没 办 法 跳 转 并 传 输 数 据 到 另 一 个 页 面 , 所以InternalResourceViewResolver 也不起作用,返回的内容就是 Return 里的内容。

6.2@GetMapping

@GetMapping 注解是@RequestMapping(method = RequestMethod.GET)的缩写。

6.3@PostMapping

@PostMapping 注解是@RequestMapping(method = RequestMethod.POST)的缩写。

6.4@PutMapping

@PutMapping 注解是@RequestMapping(method = RequestMethod.PUT)的缩写。

6.5@DeleteMapping

@DeleteMapping 注解是@RequestMapping(method = RequestMethod.DELETE)的缩写。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plenilune-望月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值