概述
SpringBoot是整合Spring技术栈的一站式框架。SpringBoot是简化Spring技术栈的快速开发脚手架。
优点
- 创建独立Spring应用
- 内嵌web服务器
- 自动starter依赖,简化构建配置
- 自动配置Spring以及第三方功能
- 提供生产级别的监控、健康检查及外部化配置
- 无代码生成、无需编写XML
入门
@RestController注解包含@ResponseBody和@Controller注解。
在导入spring-boot-maven-plugin
遇到Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found
的错误时,可以通过添加版本号解决,添加版本号是很多找不到文件时解决方案。
SpringBoot不必打包成war包,打包成jar包即可,只需导入spring-boot-maven-plugin
,springboot会将所需的依赖一同打包入jar包。使用Maven的Lifecycle中package打包即可。
@SpringBootApplication注解指明启动程序,只需执行main方法即可启动项目。
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
自动配置原理
父项目做依赖管理,里面指定了很多依赖的版本号。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
starter场景启动器:spring-boot-starter-*
是官方的,而*-spring-boot-starter
是第三方。
springboot为我们自动配好Tomcat、自动配好SpringMVC、自动配好Web常见功能,如:字符编码问题、默认的包结构、各种配置拥有默认值、按需加载所有自动配置项。
主程序所在包及其下面的子包都会被默认进行组件扫描。
配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的。
配置类本身也是组件,可以通过getBean
方法获取。
常用注解
@Configuration中的属性proxyBeanMethods的值默认为true,是新特性,用于代理bean的方法。true的时候保证获取的对象是单实例的,false则会保留代理对象,可以获取新的对象。启用代理,就是先创建bean,每次用的时候直接拿。如果类组件之间没有依赖关系则使用false,若有则使用true。
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
Pet tom01 = run.getBean("tom", Pet.class);
Pet tom02 = run.getBean("tom", Pet.class);
System.out.println("组件:"+(tom01 == tom02));//在true模式下,两者是相同的
//配置类本身也是组件
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
//如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。
//保持组件单实例,使用配置类调用bean
User user = bean.user01();
User user1 = bean.user01();
System.out.println(user == user1);
}
}
@Import注解给容器中使用无参构造创建出填入类型的组件:@Import({User.class, DBHelper.class})
。
@Conditional注解实现条件装配,若满足Conditional指定的条件,则进行组件注入:@ConditionalOnMissingBean(name = "tom")。
@ImportResource注解用于将xml的组件导入的配置类中:@ImportResource("classpath:beans.xml")。
配置绑定
@ConfigurationProperties读取properties文件中的内容,并将其封装到JavaBean中,只需填写前缀接口,属性会自动对应类中的属性。
@Component
@ConfigurationProperties(prefix="mycar")
public class Car{
......
}
在配置类中使用@EnableConfigurationProperties(Car.class)注解开启Car属性配绑定功能并将Car组件自动注册到容器中,这样可以少写@Component注解。
自动配置原理
- 引导加载自动配置类。
- 按需开启自动配置项。
- 修改默认配置,以用户配置的优先。
开发步骤
- 引入场景依赖
- 查看哪些部分进行了自动化配置,在application.propreties中添加
debug=true
可以查看。 - 配置是否需要修改,参照文档修改配置项,自定义加入或替换组件。
开发工具
- lombok
- devtools,
ctrl+F9
更新。 - Spring Initializr。
开发
yaml中字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义。
欢迎页面有两种方式:1、静态资源下index.html;2、Controller能够处理/index请求。
只需将图片命名为favicon.ico即可作为网站的图标。
Rest风格如果使用客户端工具,如PostMan直接发送Put、Delete方式请求,无需使用Filter。
静态资源访问
只要静态资源放在类(resources)路径下:/static
或/public
或 /resources
或 /META-INF/resources
,就可以通过当前项目根路径/ + 静态资源名访问。
原来是静态映射/**
,请求进来优先找Controller是否能处理,不能处理的所有请求都交给静态资源猫处理器。
静态资源访问默认无前缀,可以通过static-path-pattern
修改前缀。
常用注解
矩阵变量写法:/cars/sell;low=34;brand=byd,audi,yd
。
注解 | 作用 |
---|---|
@PathVariable | 路径变量 |
@RequestHeader | 获取请求头 |
@RequestParam | 获取请求参数 |
@CookieValue | 获取cookie值 |
@RequestBody | 获取请求体[POST] |
@RequestAttribute | 获取request域属性 |
@MatrixVariable | 矩阵变量 |