references
- https://snailclimb.gitee.io/springboot-guide/#/
- https://www.cnblogs.com/javaguide/p/springboot-auto-config.html
- https://www.yuque.com/atguigu/springboot
一般SpringBoot项目的结构
- hello-world (项目名)
- .idea
- .mvn
- src (存放代码的地方)
- main
- java
- resources
- static (存放静态文件:图片,css,js等等)
- templates (存放模板文件:jsp,thymeleaf等等)
- application.properties / yml (项目的配置文件)
- test (存放测试文件)
- main
@SpringBootApplication 注解,包含
- @EnableAutoConfiguration
- @SpringBootConfiguration
- @ComponentScan -> 默认扫描启动类所在包下所有的类
SpringBoot的自动装配
@PathVariable, @RequestParam, @RequestBody
- @PathVariable 用于获得 url 中的路径参数
@RequestParam 用于获得url中的查询参数
常见的路径参数和查询参数的例子:/klasses/{123456}/teachers?type=web
@RequestBody 用于获得通过 post 传递的 json 数据
常见的 json 数据例子:{“userName”:”coder”,”fullName”:”shuangkou”,”password”:”123456”}
读取配置文件中数据的注解(spring)
- @Value(“${配置文件中的变量名}”)
- @ConfigurationProperties(prefix = “配置文件中的前缀名”)
- 使用 @ConfigurationProperties 的类同时要添加 @Component 注解
- 如果不能添加 @Component 注解,那么可以在启动类添加 @EnableConfigurationPropertie(xxx.class) 来指明要自动设置值的类
面试准备
springboot 是什么
- springboot 并不是对 spring 功能上的增强,而是提供了一种快速使用 spring 的方式
- 为什么要使用 springboot
- spring 的缺点:配置繁琐,引入依赖麻烦
- springboot 的优点:
- 在 springboot 推出之前,在开发过程中使用 spring 往往要进行大量的文件配置和引入依赖,而不同的依赖之间又会有不同版本的冲突。为了解决这些问题,springboot就诞生了,通过在 springboot 在不同的 starter 中定义了在不同的开发场景中要用到的 bean 实例,那么我们只要引入对应的 starter 包即可;而在其中的父项目,spring-boot-starter-parent 的 dependencyManagement 中定义一些依赖的版本,当我们在之后的项目中要引入依赖的时候,就会按照已经定义好的依赖版本去引入,解决了不同版本之间的冲突问题
- 其中内嵌了 tomcat 服务器,使得只要将 springboot 项目打包成一个 jar 包就可以独立运行
- 使得其他框架的使用更加简洁,例如如果要在Spring Boot中使用Mybat-Plus,只要导入他们开发的starter包就可以了
什么是 starter?
- 我的理解是 starter 是用于特定开发场景的依赖包,不同的 starter 包里面包含了该开发场景中常用的一些依赖。那么当我们要用到特定开发场景的功能的时候,就引入对应的 starter 就行,然后 maven 就会将该 starter 包含的其他包全部引入,就不需要我们独自将需要的依赖一个个分开引入了。
- starter中会有一个@Configuration类,然后将该jar包所需要用到的bean对象都定义在这个配置类中,并且在META-INF/spring.factories中写入这个配置类,那么当spring boot项目启动的时候就会去扫描这个配置,同时一并将里面使用了@Bean注解的类实例化以及放入到IoC容器里面
springboot 的核心注解:@SpringBootApplication
- 该注解其实是三个注解:@SpringBootConfiguration、@EnableAutoConfiguration & @ComponentScan 的组合
- @SpringBootConfiguration 的本质就是 @Configuration,其作用是用于标记配置类,允许在配置类中定义额外的 bean 实例
- 其中 @Configuration 还可以更改 proxyBeanMethods 的值,true / false,用来设定配置类中 @Bean 返回的实例是单实例抑或是多实例
- @ComponentScan,用于制定扫描的范围,位于扫面范围内的 bean 实例都会被扫描到容器内
- @EnableAutoConfiguration
- 该注解会加载 AutoConfigurationImportSelector 类,然后这个类最终会找到 spring-boot-autoconfigure jar 包中的 META-INF/spring.factories 文档,在这个文档中写有所有的 xxxAutoConfiguration 组件。在读取到这个内容之后,spring 就会按需来加载对应的 AutoConfiguration 配件
- 每个 AutoConfiguration 类上一般都有 @ConditionalOnxxx 的注解,只有当注解的条件被满足了之后,该 AutoConfiguration 类才会被自动加载到容器之中;例如说 @ConditionalOnBean、@ConditionalOnMissingBean 等
- reference:https://www.cnblogs.com/javaguide/p/springboot-auto-config.html( springboot 自动装配原理讲解)
配置文件的优先级
- properties > yml > yaml
- 有优先级更高的配置文件中已定义的值,如果在优先级较低的配置文件中重复出现,就不会再次加载
- 要注意 yml / yaml 中:1)数据值前面必须有空格,作为分隔符;2)使用缩进表示层级关系;3)缩进的空格数目不重要,只要同级的数据值左边对其即可
- yml / yaml 中的数组,使用“-”表示数组的单个元素
- ${key},参数引用
springboot 中配置文件信息的读取
- @Value:将注解 @Value(“${property}”) 加到要赋值的成员属性上
- @ConfigurationProperties (prefix = “xxx”)
- 被注解的类中的成员属性会自动匹配配置文件中名字一样的属性值
- 不过使用该注解的前提是:1)被注解类已经加上了 @Component 或者其他注解(即被注解类是在 spring 容器中的);2)或者在配置类上使用 @EnableConfigurationProperties (xxx.classs) 来启动自动配置
- spring 配置文件的加载也是有优先级的,具体的级别为:
- config(在 src 外部的)内的 > resources 下的 config 文件夹内的 > 直接位于 resources 文件夹内的
- reference:https://github.com/CodingDocs/springboot-guide/blob/master/docs/basis/read-config-properties.md
@Controller & @RestController
- @Controller 用于直接返回视图的项目中,属于前后端不分离
- @RestController 会将结果封装在 JSON 中然后在返回,前端接受到结果之后再进一步处理,属于前后端分离
question
- maven-plugin 是为了把项目打包成 jar 包,直接在目标服务器执行即可?
unsolved (注解)
- 参数校验
- JSR 提供的校验注解
- Hibernate Validator 提供的校验注解
- @RequestBody + @Valid
- @Path Variables 和 @Request Parameters + @Valid 和 @Validated
- 自定义的Validator
- 处理Controller层异常
- JPA相关
- 事务:@Transactional
- Json 数据处理
- 测试相关