SpringBoot学习
SpringBoot学习
1. SpringBoot入门
1.1 Springboot Web项目pom.xml基本配置
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chenteng</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>boot-01-helloworld-2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--web依赖: tomcat,dispatcherServlet,xml....-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring-boot-starter所有依赖都是以此开头-->
<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--thymeleaf两个依赖-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!--配置处理器,为了开发方便,便捷了application.yml编写,但不建议进入打包内容中-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--不将便捷开发yml工具内容打进包里-->
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<!--在这里修改版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<!---->
</plugins>
</build>
</project>
1.2 主程序
//程序主入口不能删,不能改
@SpringBootApplication
//方法名(HelloworldApplication)可变
public class HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
}
1.3 编写业务
@RestController
public class HelloController {
@RequestMapping("/hello")
public String handle(){
return "Hello Spring Boot 2";
}
}
1.4 测试
直接运行main方法
1.5 简化配置
application.properties
#核心配置文件
server.port=8081
#关闭模板引起的缓存
spring.thymeleaf.cache=false
1.6 简化部署
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--在这里修改版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<!---->
</plugins>
</build>
把项目打成jar包,直接在目标服务器执行即可。
了解自动配置原理
1. SpringBoot特点
1.1 依赖管理
- 父项目做依赖配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
他的父项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.5</version>
</parent>
几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁
- 开发导入starter场景启动器
1.spring-boot-starter-*:*就某种场景 如:spring-boot-starter-web
2.可自定义Start属于高阶内容,地址网站也有介绍
SpringBoot官方所有支持的场景地址:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters
- 无需关注版本号,自动版本仲裁
- 可以修改版本号
1.查看spring-boot-dependencies里面规定当钱依赖的版本用的key
2.在当前项目里面重写配置
1.2 自动配置
-
自动配好Tomcat
-
自动配好SpringMVC
- 引入SpringMVC全套组件
- 自动配好SpringMVC常用组件(功能)
-
自动配好Web常见功能,如:字符编码问题
- SpringBoot帮我们配置好了所有web开发的常见场景
-
默认的包结构
- 主程序所在包及其下面的所有子包里面的组件都被默认扫描进来
- 无需以前的包扫描配置
- 想要改变扫描路径
- @ComponentScan()
- @SpringBootApplication(scanBasePackages = "com.learn")
@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.learn.boot") 等同于 @SpringBootApplication
-
各种配置拥有默认值
- 默认配置最终都是映射到某个类上的
- 配置文件的值最终会绑定某个类上,这个类会在容器中创建对象
-
按需加载所欲偶自动配置项
- 引入哪些场景,引入的场景会自动配置
- SpringBoot所有自动配置功能都在
2. 容器功能
2.1 组件添加
1.@Configuration
- 基本使用
- Full模式与Lite模式
- 实例
- 最佳实战
- 配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
- 配置类组件之间有依赖关系,方法会被调用得到之间单实例组件,用Full模式
/**
* 配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
*/
@Configuration//告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
@Bean//给容器中添加组件。以方法名作为组件的id,返回类型就是组件类型返回值就是组件在容器中的实例
public User user(){
return new User("zhangsan",18);
}
}
2.@Bean:给容器中添加组件、@Component:代表组件、@Controller:代表控制器、@Service:代表业务逻辑组件、@Repository:代表数据库层组件
3.@ComponentScan:代表通过包扫描指定包扫描规则、@Import:给容器中导入组件
@Import({DBHelper.class}) 给组件中自动创建这个类想的组件,默认组件的名字就是全类名
4.@Conditional
条件装配:满足Conditional指定的条件,则进行组件注入
5.ConfigurationProperties
导入spring配置
2.2 配置绑定
1.@ConfigurationProperties
2.@EnableConfigurationProperties + @ConfigurationProperties
3.@Component + @ConfigurationProperties
3. 自动配置原理入门
3.1 引导加载自动配置类
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
1. @SpringBootConfiguration
@Configuration。代表当前是一个配置类
2. @ComponentScan
指定扫描,spring注解;
3. @EnableAutoConfiguration
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
3.1.1 @AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
//利用Registor给容器中导入一系列组件
//将指定的一个包下的所有组件导入进来
3.1.2 @Import({AutoConfigurationImportSelector.class})
总结:
- SpringBoot先加载所有的自动配置类
- 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值
- 生效的配置类就会给容器中装配很多组件
- 只要容器中有这些组件,相当于这些功能就有了
- 只要用户有自己的配置,就以用户配置优先
- 定制化配置
- 用户使用@Bean替换底层组件
- 用户查询该组件获取的配置文件的值去修改就行
3.2 最佳实践
- 引入场景依赖
- 查看自动配置了哪些(选做)
- 是否需要修改
- 参照文档修改配置项
- 自定义加入或替换组件
- ......
4. 开发小技巧
4.1 Lombok
在pom.xml中添加lombok
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
4.2 devtools 或 Jrebel(付费)热更新
4.3 SpringBoot默认文件夹
- static文件夹放置静态资源
- templates文件夹放置页面
3. SpringBoot2核心功能
配置文件
4. Web开发
4.1 官方介绍
4.2 简单功能分析
4.2.1 静态资源访问
1.静态资源目录
类路径下:staitc、public、resources、META-INF/resources
访问:当前项目根目录/ + 静态资源名
原理:静态映射/**
2.静态资源访问前缀
默认无前缀:http://localhost:8081/ 静态资源名
配置前缀方法:在application.yml进行修改
spring:
mvc:
static-path-pattern: /res/**
http://localhost:8081/ res/静态资源名
4.2.2 欢迎页支持
- 静态资源路径下 index.html
- 可以配置静态资源路径,不能配置静态资源访问前缀
4.2.3 自定义Favicon
当前网页图片获取方法:检查网页,Network中搜寻:favicon.ico,访问Headers下的Request URL,将图标右键下载
改变静态资源访问路径会导致Favicon功能失效
spring:
mvc:
static-path-pattern: /res/**
4.3 请求参数处理
4.4 响应数据与内容协商
4.5 试图分析与模本引擎
4.6 拦截器
4.7 跨域
问题一:pom.xml中添加lombok后未生效
解决办法:沒辦法new對象 和使用getter setter的 要去IDEA左上角 File->setting->Plugins找lombok插件安裝
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通