SpringBoot笔记
SpringBoot文档
Spring Boot 是什么
- Spring Boot 可以轻松创建独立的、生产级的基于Spring 的应用步伐
- Spring Boot 直接嵌入Tomcat、Jetty 或Undertow ,可以"直接运行" SpringBoot 应用步伐
- Spring Boot有Web场景启动器,会自动导入和Web相关的依赖
Springboot/Srping/SpringMVC之间的关系
- 关系大概是: Spring Boot > Spring > Spring MVC
- Spring MVC 只是Spring 处理WEB 层请求的一个模块/组件, Spring MVC 的基石是Servlet
- Spring 的核心是IOC 和AOP, IOC 提供了依赖注入的容器, AOP 解决了面向切面编程
- Spring Boot 是为了简化开发, 推出的封神框架(约定优于设置[COC],简化了Spring 项目的设置流程), SpringBoot 包含许多组件/架,Spring 就是最核心的内容之一,也包含SpringMVC
- Spring 家族,有众多衍生框架和组件例如boot、security、jpa 等, 他们的底子都是Spring
约定优于设置
- 约定优于设置(Convention over Configuration/COC),又称按约定编程,是一种软件计划规范, 本质上是对体系、类库或框架中一些东西假定一个大众化公道的默认值(缺省值)
- 例如在模型中存在一个名为User 的类,那么对应到数据库会存在一个名为user 的表,只有在偏离这个约定时才必要做相关的设置(例如你想将表名命名为t_user 等非user 时才必要写关于这个名字的设置)
- 简单来说就是如果你所期待的设置与约定的设置一致,那么就可以不做任何设置,约定不符合期待时, 才必要对约定进行替换设置
- 约定实在就是一种规范,遵循了规范,那么就存在通用性,存在通用性,那么事情就会变得相对简单,步伐员之间的沟通本钱会降低,工作效率会提升,合作也会变得更加简单
依赖管理
- spring-boot-starter-parent 另有父项目, 声明了开发中常用的依赖的版本号
- 并且进行自动版本仲裁, 即如果步伐员没有指定某个依赖jar 的版本,则以父项目指
定的版本为准
怎样修改版本仲裁?
修改版本仲裁-方法一
在pom.xml中显示的设置
修改版本仲裁-方法二
在spring-boot-starter-parent 的父项目 中修改即可
场景启动器Starter
- 开发中我们引入了相关场景的starter,这个场景中全部的相关依赖都引入进来了,好比我们做web 开发引入了,该starter 将导入与web 开发相关的全部包
- SpringBoot 也支持第三方starter。第三方starter 不要从spring-boot 开始,因为这是官方spring-boot 保留的命名方式的。第三方启动步伐通常以项目名称开头。
- 也就是说:xxx-spring-boot-starter 是第三方为我们提供的简化开发的场景启动器
SpringBoot 自动设置了哪些?
- 自动设置Tomcat
- 自动设置SpringMVC
- 自动设置Web 常用功能: 好比字符过滤器
- 【默认扫描主步伐地点包以及其子包】
怎样修改默认扫描包结构?
设置 @SpringBootApplication(scanBasePackages="com.xxx")
怎样修改SpringBoot默认设置?
在 resources/application.properties 文件中修改
在application.properties 自定义设置
- 通过 @Value(${ })获取值
- 例如 my.website=http://www.baidu.com
- @value(${my.website})//获取方式:
- private String bdUrl(){
-
- }
复制代码 - SpringBoot 全部的自动设置功能都在spring-boot-autoconfigure 包里面
- 在SpringBoot 的自动设置包, 一般是XxxAutoConfiguration.java, 对应XxxxProperties.java
容器功能
Spring注解
Spring中传统的注解依然可以使用
@Configuration注解
案例一- @Configuration//表示这是一个配置类【类似spring的bean.xml配置文件】
- //当一个类被 @Configuration 标识 ,该类【bean】自己本身也会注入到容器中
- public class BeanConfig {//配置类可以有多个, 就和Spring 可以有多个beans.xnl配置文件是一个道理.
- @Bean // 程序员可以通过@Bean 注解注入bean对象到容器
- // 给容器添加组件,就是Monster bean;
-
- // 方法名(monster01),作为 bean 的 id/名字 ;
- // 返回值(Monster) 表示 注入类型 是 Monster 类型 ;
- // new Monster(200,"nmw",500,"fmq"); 就是注入到容器的bean的具体信息
- public Monster monster01() {
- return new Monster(200, "nmw", 500, "fmq");
- }
复制代码
- 方法名(monster01),作为 bean 的 id/名字 ;
- 返回值(Monster) 表示 注入类型 是 Monster 类型 ;
- new Monster(200,"nmw",500,"fmq"); 就是注入到容器的bean的具体信息
案例二
- 可以通过在注解 @Bean 中设置属性 来指定bean的名字 @Bean("monster_nmw")
- @Bean("monster_nmw")
- // 也可以通过在注解 @Bean 中设置属性 来指定bean的名字 @Bean("monster_nmw")
- public Monster monster02() {
- return new Monster(200, "nmw", 500, "fmq");
- }
复制代码 案例三
- @Configuration(proxyBeanMethods = true) ---proxyBeanMethods:代理bean 的方法
- @Configuration(proxyBeanMethods = true)
- public class BeanConfig {
- @Bean
- //默认单例注入
- //多例模式 添加注解: @Scope("prototype")
- public Monster monster01() {
- return new Monster(200, "nmw", 500, "fmq");
- }
复制代码
- proxyBeanMethods:代理bean 的方法
- Full(proxyBeanMethods = true) 【保证每个@Bean 方法被调用多少次返回的组件都是单实例的, 是代理方式】
- Lite(proxyBeanMethods = false)【每个@Bean 方法被调用多少次返回的组件都是新创建的, 是非代理方式】
- 特别阐明: proxyBeanMethods 是在调用@Bean 方法才生效,因此,必要先获取BeanConfig 组件,再调用方法而不是直接通过SpringBoot 主步伐得到的容器来获取bean, 注意观察直接通过ioc.getBean() 获取Bean,proxyBeanMethods 值并没有生效
- 怎样选择: 组件依赖必须使用Full 模式默认。如果不必要组件依赖使用Lite 模式 ;
- Lite 模式也称为轻量级模式,因为不检测依赖关系,运行速率快
@Import注解
- @Configuration
- @Import({Dog.class, Cat.class})//可以指定Class数组,可以注入指定类型的Bean ;默认组件 id 是 对应的类型的全类名
- public class BeanConfig {}
复制代码
- 可以指定Class数组,可以注入指定类型的Bean ;
- 默认组件 id 是 对应的类型的全类名(com.xxx.xx...)
@Conditional注解
- 条件装配,满意Conditional 指定的条件,才进行组件注入
- @Conditional 是一个根注解,下面有许多扩展注解
- @Bean
- @ConditionalOnBean(name = "monster_nmw")
- //【条件装配】表示 只有在ioc容器中存在一个名字 为 monster_nmw 的bean,才能注入 dog01
- public Dog dog01() {
- return new Dog();
- }
复制代码
- 只有在ioc容器中存在一个名字 为 monster_nmw 的bean,才能注入 dog01
- 对name约束,对其他无关
- 有 其他扩展注解,对应不同的约束例如 :@ConditionalOnMissingBeanName(name="monster-nmw")
表示 没有name="monster-nmw" 才会注入容器
- 如果@ConditionalOnBean 表示在某个类上,则该类全部的组件都要受到约束
@ImportResource
- 作用:原生设置文件引入, 也就是可以直接导入Spring 传统的beans.xml ,可以认为是SpringBoot 对Spring 容器文件的兼容.
- @Configuration
- //导入bean.xml文件
- @ImportResource("classpath:beans.xml")
- public class BeanConfig2 {
- }
复制代码 将beans.xml导入到设置类
设置绑定@ConfigurationProperties
- 使用Java 读取到SpringBoot 核心设置文件application.properties 的内容,并且把它封装到JavaBean 中
1.在application.properties 文件中设置 属性 k-v 【属性必要和JavaBean的属性对应】- furn01.id=100
- furn01.name=soft_chair!!
- furn01.price=45678.9
复制代码 2.在JavaBean上添加注解 @ConfigurationProperties(prefix = "furn01")- @Component
- @ConfigurationProperties(prefix = "furn01")
- public class Furn {
- private Integer id;
- private String name;
- private Double price;
- }
复制代码 注意事项
- 另一种绑定方式:在设置类上加上 @EnableConfigurationProperties(Furn.class)
- 如果application.properties 有中文, 必要转成unicode 编码写入, 否则出现乱码
yaml介绍
- yaml以数据作为中心,不以标记语言为中心
- yaml仍然是一种标记语言,但是以数据作为中心
- yaml非常适合用来做以数据为中心的设置文件
yaml基本语法
- 形式为 key: value 【注意: 后有空格】
- 区分大小写
- 使用缩进表示层级关系
- 缩进推荐使用空格
- 缩进空格数不告急,只要雷同层级的元素左对齐即可
- 字符串无需加引号
- yaml解释使用 #
yaml数据类型
- 字面量:date,boolean,string,number,null
- 对象:键值对的集合 map,hash,set,object
行内写法- k: {k1: v1,k2: v2,k3: v3}
复制代码 换行写法 - 数组 array,list,queue
行内写法换行写法 注意事项:
- application.properties 的优先级比 application.yml 高,因此要制止前缀雷同
- 字符串无需加引号,加引号不影响
静态资源的访问
基本介绍
- 只要静态资源放在 类路径下 :“classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/”
- 访问方式:默认 项目根路径/静态资源名
注意事项
- 静态资源访问原理:静态映射的 /**,也就是拦截全部请求。当请求进来,先判断Controller能否处理,不能处理的请求交给静态资源处理器,如果静态资源找不到,响应404页面
- 修改静态资源访问前缀【当与Controller路径冲突时】
在application.yml设置‘- spring:
- mvc:
- static-path-pattern: /zyres/** #静态资源前缀
复制代码 - 修改静态资源访问路径
在application.yml设置‘- web:
- resources:
- static-locations: [classpath:/img/] #添加默认静态资源路径
复制代码 原先的默认路径会被覆盖,必要再配
Rest风格请求
- Rest风格请求的核心Filter:HiddenHttpMethodFilter,表单请求会被HiddenHttpMethodFilter 拦截,获取表单的 _method值,再判断是PUT/PELETE/PATCH
- 如果必要Springboot支持 页面表单的rest风格请求功能,必要在application.yml 启用filter功能,否则无效
- spring:
- mvc:
- hiddenmethod:
- filter:
- enabled: true #页面表单支持rest风格
复制代码 视图剖析器的设置
[code]spring: mvc: view: suffix: .html prefix: /zyres/ #视图剖析器 |