SpringBoot是什么?
- Spring为应对互联网应用的要求(高可靠,高并发,负载均衡),推出了SpringBoot和微服务框架QSpringCloud,虽然SpringBoot为微服务而生,但多用于单体应用,SpringCloud完全建立在SpringBoot之上
- SpringBoot是基于Spring的框架,目的是快速搭建Spring环境
- SpringBoot让我们的框架更加便捷化,自动化,简单化
- SpringMVC,Spring,MyBatis都可以集成到SpringBoot中
- SpringBoot是主要基于注解和编程式配置的实现,在SpringBoot中推荐使用properties或yml文件作为他的配置文件SpringBoot的开发理念是习惯优于配置,SpringBoot默认不支持JSP,推荐使用HTML或模板引擎技术
- SpringBoot中内置Web服务器,不需要搭建外部Web服务器,在SpringBoot开发中更加推荐搭建jar项目而非war项目
- SpringBoot推出 Starter组件(启动器,每个Starter即为一个应用,它将相关配置、开发包都集成在Starter中),开发人员在应用中只要引入相关的Starter即可完成配置,从而让开发人员从复杂而繁琐的配置中解脱出来,实现项目的快速搭建
优点:
- 开箱即用,提供各种默认配置来简化项目配置
- 嵌入式容器简化web项目
- 没有冗余代码生成和xml配置的要求
什么是微服务架构?
三层架构service架构
微服务架构概念
最核心的部分:自动装配
SpringBoot的使用
<!--引入springBoot父项目
springboot对spring相关版本进行规定
也对spring基础配置进行了约定
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.9</version>
</parent>
添加spring-boot-starter-web依赖
引入后springboot支持web开发
里面包含了 Tomcat web服务器和Spring Boot本身等依赖
<!--引入spring-boot-starter-web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
编写SpringBoot的核心配置类(启动类)
spring启动类,核心配置类,必须在项目的跟包下,springBoot组件扫描器会自动扫描当前类所在包的以及其中的子包中的类
@SpringBootApplication:SpringBoot启动类注解,加入该注解后,运行该类的main函数,spring项目启动。
该注解包含三个注解
- @EnanleAutoConfiguration:启动Spring Boot的自动配置机制
- @ComponentScan:启动@Component扫描应用程序所在的软件包
- @SpringBootConfiguration:配置类注解相当于spring的@Configuration注解
/**
* spring启动类,核心配置类,必须在项目的根包下,Springboot组件扫描器会自动扫描当前类所在的包及其子包中的类
* @SpringBootApplication:SpringBoot启动类注解,加入该注解后,运行该类的main函数,Spring项目启动
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
//启动springboot环境
SpringApplication.run(Application.class,args);
}
}
F:\java17\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\Intellij IDEA\lib\idea_rt.jar=58274:D:\Intellij IDEA\bin" -Dfile.encoding=UTF-8 -classpath F:\springBoot\target\classes;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.7.2\spring-boot-starter-web-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter\2.7.2\spring-boot-starter-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot\2.7.2\spring-boot-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.2\spring-boot-autoconfigure-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.7.2\spring-boot-starter-logging-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\HUAWEI\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\HUAWEI\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\HUAWEI\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\HUAWEI\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\HUAWEI\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\HUAWEI\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-core\5.3.22\spring-core-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-jcl\5.3.22\spring-jcl-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.7.2\spring-boot-starter-json-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.3\jackson-datatype-jdk8-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.3\jackson-datatype-jsr310-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.3\jackson-module-parameter-names-2.13.3.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.2\spring-boot-starter-tomcat-2.7.2.jar;C:\Users\HUAWEI\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.65\tomcat-embed-core-9.0.65.jar;C:\Users\HUAWEI\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.65\tomcat-embed-el-9.0.65.jar;C:\Users\HUAWEI\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.65\tomcat-embed-websocket-9.0.65.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-web\5.3.22\spring-web-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-beans\5.3.22\spring-beans-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-webmvc\5.3.22\spring-webmvc-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-aop\5.3.22\spring-aop-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-context\5.3.22\spring-context-5.3.22.jar;C:\Users\HUAWEI\.m2\repository\org\springframework\spring-expression\5.3.22\spring-expression-5.3.22.jar com.mk.controller.Application
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.2)
2023-04-05 14:48:01.746 INFO 16416 --- [ main] com.mk.controller.Application : Starting Application using Java 17.0.4.1 on 马凯 with PID 16416 (F:\springBoot\target\classes started by HUAWEI in F:\springBoot)
2023-04-05 14:48:01.749 INFO 16416 --- [ main] com.mk.controller.Application : No active profile set, falling back to 1 default profile: "default"
2023-04-05 14:48:02.798 INFO 16416 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-04-05 14:48:02.811 INFO 16416 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-04-05 14:48:02.811 INFO 16416 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65]
2023-04-05 14:48:02.923 INFO 16416 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-04-05 14:48:02.923 INFO 16416 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1107 ms
2023-04-05 14:48:03.341 INFO 16416 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-04-05 14:48:03.353 INFO 16416 --- [ main] com.mk.controller.Application : Started Application in 2.04 seconds (JVM running for 2.832)
@RestController
@RequestMapping("/demo01")
public class DemoControl {
@RequestMapping("/demo01")
public String Demo01(){
return "index";
}
}
- application.yml
# 服务端配置
server:
port: 80 # 设置服务器端口号
servlet:
context-path: /springboot-project # 设置项目上下文路径(访问根路径)
# 配置日志
logging:
level:
root: info
web: trace
- 或application.properties
# 设置服务器端口号
server.port=80
# 设置项目上下文路径(访问根路径)
server.servlet.context-path=/springboot-project
#配置日志
logging.level.root=info
logging.level.web=trace
yaml语法讲解:
person:
name: heizi
age: 3
happy: false
birth: 2002/07/03
dog:
name: xiaohei
age: 3
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: root
password: 112233
driver-class-name: com.mysql.cj.jdbc.Driver
导入依赖在springboot.properties配置文件中可以提示属性等等
<dependency>
<grouId>org.springframework.boot</grouId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
SpringBoot底层注解
@Conditional
条件装配满足Conditional指定的条件,则尽心组件注入
@ImportResource(“classpath:bean.xml”)
原生配置文件引入
配置绑定
@ConfigurationProperties(prefix = “属性名称”)
@EnableAutoConfiguration
@ConditionalOnBean(MultipartResolver.class) 文件上传解析器
文件上传解析器 MultipartResolver
给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找寻
注:SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的配置优先
总结:SpringBoot先来加载所有的配置类
dev-tools工具
修改配置 ctrl+F9 更新静态页面,热更新部署重新启动
静态资源导入探究
1、在springboot,我们可以使用以下方式处理静态资源
- webjars localhost:8080/webjars/
- public, static, /**, resources localhost:8080/
2、优先级:resources > static (默认) > public
Thymeleaf模板引擎
- 将html放到我们的templates目录下
public static final String DEFAULT_PAEFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
SpringSecurity(安全)
SpringSecurity简介:
Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以卖现强大的Web安全控制,对于安全控制,我们仅需要引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理!
- WebSecurityConfigurerAdapter:自定义Security策略
- AuthenticationManagerBuilder:自定义认证策略
- EnableWebSecurity:开启WebSecurity模式
SpringSecurity两大核心功能
- 认证(Authentication):是建立一个主体的过程(“主体”一般指用户,设备或可以在应用程序中执行动作的其他系统),简单说是使用者通过账户名和密码登录的过程称为认证。
- 授权(Authenrization):是指一个主体是否允许在应用程序中执行某个动作的过程,简单说就是给某个用户指定某个功能的访问权限。
- SpringSecurity通过过滤器实现请求拦截。实现认证,授权等操作。
Spring Security的两个主要目标是“认证”和"授权"(访问控制)。
SpringSecurity的基本使用
- 引入SpringBoot和SpringSecurity相关依赖
<parent>
<groupId>org.springframework.boot</groupId>
<version>2.7.9</version>
<artifactId>spring-boot-starter-parent</artifactId>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
2、创建springBoot启动类
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
静态资源访问
- 配置类只有一个有参构造器
- 有参构造器所有参数都会从容器中获取
获取springMVC绑定的所有对象的值
资源处理的默认规则
resources:
add-mappings: false 禁用所有的静态资源规则
请求参数处理:
@xxxMapping
- Rest风格支持(使用http请求方式动词来获取表示对资源的操作)
- 以前: /user GET-获取用户 /deleteUser-删除用户 /updateUser更新用户 /saveUser保存用户
- 现在: /user GET-获取用户 delete-删除用户 put-修改用户 POST-保存用户
核心Filter: HiddenHttpMethodFilter
- 用法:表单method=post, 隐藏域_method=put
Rest原理(表单提交带上Rest参数请求)
-
表单提交会带上_method=put
-
请求过来会被HiddenHttpMethodFilter拦截
复杂参数:
- Map、Model(Map、model里面的数据会被封装在request中的请求域中 request.setAttribute)Errors/BindingResult、RedirectAttributes(重定向携带数据),ServletResponse(response)、SessionStatus、UriComponmentsBuilder、ServletUriComponentsBuilder
Map<String,Object> map, Model model,HttpServletRequest request 都是可以给request域中存放数据
request.getAttribute();
错误处理机制
1、默认规则
- 默认情况下,Spring Boot提供/error处理所有错误的映射
- 对于机器客户端,它将生成JSON响应,其中包含错误;HTTP状态和异常消息的详细信息。对于浏览器客户端,响应一个“whitelabel”错误视图,以HTML格式呈现相同的数据
- 要对其进行自定义,添加view解析为error
- 要完全替换默认行为,可以实现 Errorcontroller并注册该类型的Bean定义,或添加ErrorAttributes类型的组件以使用现有机制但替换其内容。
2、定制错误处理逻辑
- 自定义错误页
- error/404.html error /5xx.html
- @ControllerAdvice+@ExceptionHandler处理异常
- 实现HandlerExceptionResolver处理异常
Web原生组件注入(Servlet、Filter、Litener)
1、使用Servlet、Filter、Litener
使用两个注解进行配合
@ServletComponentScan(basePackages = "com.mk.admin"):指定原生Servlet组件都放在哪里
@WebSerlvet(urlPatterns = "/my"); 效果:直接相应,没有Spring的拦截器
@WebListener
@WebFilter(urlPatterns = {"/css/*","images/*"})
@WebFilter
@WebFilter(urlPatterns = {"/css/*","images/*"})
类似 与ServletComponentScan搭配使用
2、使用RegistrationBean
@Bean
public ServletRegistrationBean myServlet(){
MyServlet myServlet = new MyServlet();
return new ServletRegistrationBean(myServlet,"/my");
}
数据访问
1、SQL
2、数据源自动配置
- 自动配置的类
- DataSourceAutoConfiguration:数据源的自动配置
- DataSourceTransactionManagerAutoConfiguration:事务管理器的自动配置
- JdbcTemplateAutoConfiguration: JdbcTemplate的自动配置,可以对数据库进行CRUD
- XADataSourceAutoConfiguration:分布式事务相关的自动配置
整合Mybatis-Plus 完成CRUD
1、什么是Mybatis-Plus
Mybatis-Plus(简称MP) 是一个Mybatis的增强工具,在Mybatis中基础上只做增强,不做改变,为简化开发,提高效率而生。
2、整合Mybatis-Plus插件
3、在项目中导入依赖
<dependency>
<groupId>com.mk</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
4、自动配置
-
MybatisPlusAutoConfiguration配置类,MybatisPlusProperties配置项绑定。
-
SqlSessionFactory自动配置好。底层默认数据源
-
mapperLocations自动配置好。有默认值。classpath:/mapper/**/.xml;任何包路径都是配置文件
任意路径下的所有xml都是sql映射文件,可以将sql映射文件放在mapper下
优点:
-
只需要我们的Mapper继承BaseMapper就可以拥有CRUD的能力,存在的所有属性都应该在
-
Mapper可以继承BaseMapper()
-
mybatisPlus分页拦截器插件
-
mybatisPlus拦截