springBoot框架简介入门教程(快速学习版)

回顾spring

优点

  • 开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。
  • 控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦。
  • 面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。
  • spring 对于主流的应用框架提供了很好的支持,例如 mybatis。
  • spring 提供有自己的 mvc 实现。

缺点

  • 虽然 spring 的组件代码是轻量级的,但它的配置却是重量级的。虽然 spring引入了注解功能,但是仍然需要编写大量的模板化配置文件.
  • 项目的依赖管理也是一件耗时耗力的事情,在环境搭建时,需要分析要导入大量库的坐标,而且还需要分析导入与之有依赖关,一旦选错依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

Spring Boot 对上述 spring 的缺点进行的改善和优化,基于约定优于配置的思想.可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。

SpringBoot概述

  • Spring Boot 是由 Pivotal 团队提供的在 spring框架基础之上开发的框架,其设计目的是用来简化应用的初始搭建以及开发过程。
  • Spirng Boot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring框架的应用程序。也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring开发者体验的工具. Spring Boot 以约定大于配置的核心思想,从而使开发人员不再需要定义样板化的配置。
  • 它集成了大量常用的第三方库配置(例如 Redis,Jpa RabbitMQ,Quartz 等等),Spring Boot 应用中这些第三方库几乎可以零配置的开箱即用,通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者。

SpringBoot特点

  • 创建独立的 spring
  • 应用程序直接内嵌 tomcat、jetty 和 undertow
  • 提供了固定化的“starter”配置,以简化构建配置
  • 尽可能的自动配置 spring 和第三方库
  • 提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
  • 绝对不会生成代码,并且不需要XML 配置

SpringBoot 的核心功能

起步依赖

  • 起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。

自动配置

  • Spring Boot 的自动配置是一个运行时(更准确地说,是应用程序启动时) 的过程,考虑了众多因素,才决定 Spring 配置应该用哪个,不该用哪个。该过 程是 Spring 自动完成的。

SpringBoot自动配置

Springboot 实现自动装配的核心仍然是使用注解标签,
@SpringBootApplication 是 springboot 核心注解,其中包含
@SpringBootConfiguration,@EnableAutoConfiguration,
@ComponentScan.
@ComponentScan 它默认扫描的是与该类同级的类或者同级包下的所有类. @SpringBootConfiguration,通过源码得知它是一个@Configuration,相当于之前的配置文件功能. @EnableAutoConfiguration 是这里最重要的注解,它实现了对 Spring Boot应用自动装配的功能。@EnableAutoConfiguration 是利用SpringFactoriesLoader 机制加载自动装配配置的,它的配置数据在
META-INF/spring.factories 中,我们打开 spring-boot-autoconfigure jar 中的该文件,发现对应着许多个 XXXAutoConfiguration 配置类.
@Configuration加入@Configuration 注解,表明这就是一个配置类。有一个 myBean()的方法
并用@Bean 进行注释,返回一个 MyBean()的实例,表明这个方法是需要被Spring 进行管理的 bean。@Bean 如果不指定名称的话,默认使用 myBean名称,也就是小写的名称。
@Bean
相当于 XML 中的,放在方法的上面,而不是类,意思是产生一个 bean,并交给 spring 管理

SpringBoot开发环境构建

官网配置生成
https://start.spring.io/ >>> 点击进入
选择配选项,在线生成并下载
解压后修改 pom.xml 版本为 2.6.6,删除.mvn 文件夹,mvnw.cmd 文件
导入到 idea 中
在这里插入图片描述

  • Springboot 集成 web 组件后,内置了 tomcat 服务器,一个 springboot
    应用相当于一个独立的服务,可以使用启动类中的 main 方法启动 springboot 程序.

在线生成启动 logo:https://www.bootschool.net/ascii >>>点击进入
下载存放在 resources 目录下即可

SpringBoot配置文件

Spring Boot 使用一个全局的配置文件(配置文件名是固定的)
application.properties 属性文件格式,内容为键值对
server.port=8080
application.yml
yml 是 YAML(YAML Ain’t Markup Language)语言的文件,以数据为中心.
yml 配置示例
server:
port: 8080
yaml 基本语法:
语法结构:key:空格 value
以此来表示一对键值对(空格不能省略);以空格的缩进来控制层级关系,
只要是左边对齐的一列数据都是同一个层级的。
值的写法
字面量:普通的值[数字,布尔值,字符串]
K: V
字面量直接写在后面就可以,字符串默认不用加上双引号或者单引号;
案例:
user:
name: zhangsan
age: 20
@ConfigurationProperties(prefix = “user” )
在这里插入图片描述

SpringBoot集成JDBC

数据源配置
在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同
的数据库配置方式。
首先,为了连接数据库需要引入 jdbc 支持,在 pom.xml 中引入如下配置:

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

在 application.yml 中配置数据源信息

spring:
	datasource:
		url:
		jdbc:mysql://127.0.0.1:3306/mybatis_db?serverTimezone=Asia/Shanghai
		username: root
		password: root
		driver-class-name: com.mysql.cj.jdbc.Driver

使用 JdbcTemplate 操作数据库
Spring 的 JdbcTemplate 是自动配置的,你可以直接使用@Autowired 来注入
到你自己的 bean 中来使用

SpringBoot集合阿里数据源

导入阿里数据源 jar
在 yml 文件中注册阿里数据库连接池

type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5 初始化时建立物理连接的个数
minIdle: 1 最小连接池数量
maxActive: 20 最大连接池数量

添加 DruidDataSource 配置工具类

SpringBoot集成mybatis

	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>2.1.4</version>
	</dependency>

在 application.yml 中配置数据源信息

			mybatis:
				type-aliases-package: com.ff.cms.bean
				mapper-locations: classpath:mapper/*Mapper.xml
				configuration:
				map-underscore-to-camel-case: true
				cache-enabled: true

启动类上添加@MapperScan(“接口所在的包地址”)@MapperScan(“接口所在的包地址”)
或者在接口上添加@Mapper

SpringBoot集成日志

  • 日志是软件应用必备的组件,是程序debug,或是数据收集管理的重要依据,方便我们监测生产环境的变量值变化以及代码运行轨迹。主要是为了方便我们监测生产环境的变量值变化以及代码运行轨迹等。这些记录会被输出到我们指定的位置形成文件,帮助我们分析错误以及用户请求轨迹。
  • 日志记录可以在程序出现问题时帮助开发人员迅速地定位错误的根源,尤其是在生产环境中运行的程序更加重要。

常用日志组件

	slf4j(Simple Logging Facade for Java)
	commons-logging
	Log4J
	Log4J2
	Logback
	JUL(Java Utils Logging)

springboot 中对这些组件都提供了支持,slf4j 和 commons-logging 是日志的
门面接口,它们都不是具体的日志框架,你可以指定其他主流的日志实现框架。一
般首选强烈推荐使用 slf4j + logback.
日志的级别划分:从低到高:debug<info<warn<error
配置日志级别和日志文件位置

	logging:
		level:
		com.ffyc.news: debug
		file:
		name: E:/log/log.log

其余信息在 logback 配置文件中
在类中使用

		创建 Logger 对象
		private static Logger logger = LoggerFactory.getLogger(当前类名.class);
		在需要的位置调用具体的日志级别方法输出
		logger.debug("user account:{},user password:{}", user.getAccount(),user.getPassword());
		logger.info("user account:{},user password:{}", user.getAccount(),user.getPassword());
		logger.warn("user account:{},user password:{}", user.getAccount(),user.getPassword());
		logger.error("user account:{},user password:{}", user.getAccount(),user.getPassword());

SpringBoot 使用 AOP 统一打印日志
导入依赖 jar

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

定义切面通知类

@Component
@Aspect
public class LogAspect {
	private Logger logger = LoggerFactory.getLogger(getClass());
	//通配符,定义规则,哪些方法可以被我的切面切到,这里的意思是不限返回值和方法和参数
	@Pointcut("execution(public * com.ffyc.news.controller..*.*(..))")
public void webLog() {
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) {
	ServletRequestAttributes attributes = (ServletRequestAttributes)
	RequestContextHolder.getRequestAttributes();
	HttpServletRequest request = attributes.getRequest();
	// 记录下请求内容
	logger.info("URL : {}", request.getRequestURL().toString());
	logger.info("HTTP_METHOD :{} ", request.getMethod());
	logger.info("IP : {}", request.getRemoteAddr());
	//获取所有请求参数
	Enumeration<String> enu = request.getParameterNames();
	while (enu.hasMoreElements()) {
	String name = (String) enu.nextElement();
	logger.info("name:{},value:{}", name, request.getParameter(name));
	}
}
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfter(Object ret) throws Throwable {
	// 处理完请求,返回内容
	logger.info("RESPONSE : " + ret);
}
/*环绕通知实现前置 最终通知
@Around("webLog()")
public Object printLog(ProceedingJoinPoint joinPoint) throws Throwable {
	Object proceed = null;
	try {
	doBefore(joinPoint);
	proceed = joinPoint.proceed();
	doAfter(proceed);
	} finally {
	//System.lineSeparator():系统换行符
	logger.info("=========END=========" + System.lineSeparator());
	}
return proceed;
}*/

SpringBoot统一异常处理

			日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一
		般都是利用 try ,catch 的方式处理异常或者 throw,throws 的方式抛出异常
		不管。这种方法对于程序员来说处理也比较麻烦,所以我们希望既能方便程序员
		编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体
		验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。

全局异常捕获与处理

		Springboot 对 于 异 常 的 处 理 也 做 了 不 错 的 支 持 , 它 提 供 了 一
	个 @RestControllerAdvice 注解以及 @ExceptionHandler 注解,前者是用来
	开启全局的异常捕获,后者则是说明捕获哪些异常,对那些异常进行处理。
@RestControllerAdvice
public class GlobalExceptionHandler {
	/**
	* 针对其他异常处理
	*/
	@ExceptionHandler(Exception.class)
	public CommonResult globalException(Exception e) {
		CommonResult commonResult = new CommonResult(500,e.getMessage());
		return commonResult;
	}
}

请求404 application.yml配置

mvc:
	throw-exception-if-no-handler-found: true
web:
	resources:
		add-mappings: false

SpringBoot集成Swagger

  • 支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。

  • 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。

环境搭建

1.导入 jar

<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
	<version>2.9.2</version>
</dependency>
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger-ui</artifactId>
	<version>2.9.2</version>
</dependency>
  1. 在 application.yml 中配置
spring:
	mvc:
		pathmatch:
			matching-strategy: ant_path_matcher
  1. 添加 swagger 配置类
    配置 swagger 扫描方式
    及放行静态资源请求不被 spring 拦

Swagger使用的注解及其说明

@Api:用在类上,说明该类的作用,tags 类的功能进行描述. @Api(tags=“用户登录控制器”)
@ApiOperation:用在方法上,用于对方法功能说明。 @ApiOperation(value=“方法概述”, notes=“功能详细描述”)
@ApiImplicitParam:用来注解来给方法入参增加说明。
在这里插入图片描述

paramType 属性表示参数放在哪里,主要有以下几个属性:
header–>放在请求头。请求参数的获取:@RequestHeader(代码中接收注解)
query–>用于 get 请求的参数拼接。请求参数的获取
path(用于 restful 接口)–>请求参数的获取:@PathVariable(代码中接收注解)
body–>放在请求体。请求参数的获取:@RequestBody(代码中接收注解)
form(不常用)
参数为实体类
在实体类上添加注解
@ApiModel:描述一个 Model 的信息(参数为实体类时使用)
@ApiModelProperty:描述一个 model 的属性
在这里插入图片描述

@ApiResponses:用于表示一组响应
@ApiResponse:用在@ApiResponses 中,一般用于表达一个错误的响应信

code:数字,例如 400
message:信息,例如"请求参数没填好" 也可以不需要添加
在这里插入图片描述

Swagger UI的使用

访问 swagger-ui.html 后可以在页面中看到所有需要生成接口文档的控制器名称。
http://localhost:端口/swagger-ui.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值