SpringBoot学习总结

打印 上一主题 下一主题

主题 870|帖子 870|积分 2610

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
    1.         @value(${my.website})//获取方式:
    2.         private String bdUrl(){
    3.        
    4.         }
    复制代码
  • SpringBoot 全部的自动设置功能都在spring-boot-autoconfigure 包里面
  • 在SpringBoot 的自动设置包, 一般是XxxAutoConfiguration.java, 对应XxxxProperties.java
容器功能

Spring注解

Spring中传统的注解依然可以使用
@Configuration注解

案例一
  1. @Configuration//表示这是一个配置类【类似spring的bean.xml配置文件】
  2. //当一个类被 @Configuration 标识 ,该类【bean】自己本身也会注入到容器中
  3. public class BeanConfig {//配置类可以有多个, 就和Spring 可以有多个beans.xnl配置文件是一个道理.
  4.     @Bean  // 程序员可以通过@Bean 注解注入bean对象到容器
  5.     // 给容器添加组件,就是Monster bean;
  6.    
  7.     // 方法名(monster01),作为 bean 的 id/名字 ;
  8.     // 返回值(Monster) 表示 注入类型 是 Monster 类型 ;
  9.     // new Monster(200,"nmw",500,"fmq"); 就是注入到容器的bean的具体信息
  10.     public Monster monster01() {
  11.         return new Monster(200, "nmw", 500, "fmq");
  12.     }
复制代码

  • 方法名(monster01),作为 bean 的 id/名字 ;
  • 返回值(Monster) 表示 注入类型 是 Monster 类型 ;
  • new Monster(200,"nmw",500,"fmq"); 就是注入到容器的bean的具体信息
案例二

  • 可以通过在注解  @Bean 中设置属性 来指定bean的名字 @Bean("monster_nmw")
  1.         @Bean("monster_nmw")
  2.     // 也可以通过在注解  @Bean 中设置属性 来指定bean的名字 @Bean("monster_nmw")
  3.     public Monster monster02() {
  4.         return new Monster(200, "nmw", 500, "fmq");
  5.     }
复制代码
案例三

  • @Configuration(proxyBeanMethods = true)  ---proxyBeanMethods:代理bean 的方法
  1. @Configuration(proxyBeanMethods = true)
  2. public class BeanConfig {
  3.     @Bean  
  4.     //默认单例注入
  5.     //多例模式 添加注解: @Scope("prototype")
  6.     public Monster monster01() {
  7.         return new Monster(200, "nmw", 500, "fmq");
  8.     }
复制代码

  • proxyBeanMethods:代理bean 的方法
  • Full(proxyBeanMethods = true) 【保证每个@Bean 方法被调用多少次返回的组件都是单实例的, 是代理方式】
  • Lite(proxyBeanMethods = false)【每个@Bean 方法被调用多少次返回的组件都是新创建的, 是非代理方式】
  • 特别阐明: proxyBeanMethods 是在调用@Bean 方法才生效,因此,必要先获取BeanConfig 组件,再调用方法而不是直接通过SpringBoot 主步伐得到的容器来获取bean, 注意观察直接通过ioc.getBean() 获取Bean,proxyBeanMethods 值并没有生效
  • 怎样选择: 组件依赖必须使用Full 模式默认。如果不必要组件依赖使用Lite 模式 ;
  • Lite 模式也称为轻量级模式,因为不检测依赖关系,运行速率快
@Import注解
  1. @Configuration
  2. @Import({Dog.class, Cat.class})//可以指定Class数组,可以注入指定类型的Bean ;默认组件 id 是 对应的类型的全类名
  3. public class BeanConfig {}
复制代码

  • 可以指定Class数组,可以注入指定类型的Bean ;
  • 默认组件 id 是 对应的类型的全类名(com.xxx.xx...)
@Conditional注解


  • 条件装配,满意Conditional 指定的条件,才进行组件注入
  • @Conditional 是一个根注解,下面有许多扩展注解


  • 例如  @ConditionalOnBean
  1. @Bean
  2.     @ConditionalOnBean(name = "monster_nmw")
  3.     //【条件装配】表示 只有在ioc容器中存在一个名字 为 monster_nmw 的bean,才能注入 dog01
  4.     public Dog dog01() {
  5.         return new Dog();
  6.     }
复制代码

  • 只有在ioc容器中存在一个名字 为 monster_nmw 的bean,才能注入 dog01
  • 对name约束,对其他无关
  • 有 其他扩展注解,对应不同的约束例如 :@ConditionalOnMissingBeanName(name="monster-nmw")
    表示 没有name="monster-nmw" 才会注入容器
  • 如果@ConditionalOnBean 表示在某个类上,则该类全部的组件都要受到约束
@ImportResource


  • 作用:原生设置文件引入, 也就是可以直接导入Spring 传统的beans.xml ,可以认为是SpringBoot 对Spring 容器文件的兼容.
  1. @Configuration
  2. //导入bean.xml文件
  3. @ImportResource("classpath:beans.xml")
  4. public class BeanConfig2 {
  5. }
复制代码
将beans.xml导入到设置类
设置绑定@ConfigurationProperties


  • 使用Java 读取到SpringBoot 核心设置文件application.properties 的内容,并且把它封装到JavaBean 中
1.在application.properties 文件中设置 属性 k-v 【属性必要和JavaBean的属性对应】
  1. furn01.id=100
  2. furn01.name=soft_chair!!
  3. furn01.price=45678.9
复制代码
2.在JavaBean上添加注解 @ConfigurationProperties(prefix = "furn01")
  1. @Component
  2. @ConfigurationProperties(prefix = "furn01")
  3. public class Furn {
  4.     private Integer id;
  5.     private String name;
  6.     private Double price;
  7. }
复制代码
注意事项

  • 另一种绑定方式:在设置类上加上 @EnableConfigurationProperties(Furn.class)
  • 如果application.properties 有中文, 必要转成unicode 编码写入, 否则出现乱码
yaml介绍


  • yaml以数据作为中心,不以标记语言为中心
  • yaml仍然是一种标记语言,但是以数据作为中心
  • yaml非常适合用来做以数据为中心的设置文件
yaml基本语法


  • 形式为 key: value  【注意: 后有空格】
  • 区分大小写
  • 使用缩进表示层级关系
  • 缩进推荐使用空格
  • 缩进空格数不告急,只要雷同层级的元素左对齐即可
  • 字符串无需加引号
  • yaml解释使用 #
yaml数据类型


  • 字面量:date,boolean,string,number,null
  • 对象:键值对的集合 map,hash,set,object
    行内写法
    1. k: {k1: v1,k2: v2,k3: v3}
    复制代码
    换行写法
    1. k:
    2. k1: v2
    3. k2: v2
    4. k3: v3
    复制代码
  • 数组 array,list,queue
    行内写法
    1. k: [v1,v2,v3]
    复制代码
    换行写法
    1. k:
    2. -v2
    3. -v2
    4. -v3
    复制代码
注意事项:

  • application.properties 的优先级比 application.yml 高,因此要制止前缀雷同
  • 字符串无需加引号,加引号不影响
静态资源的访问

基本介绍


  • 只要静态资源放在 类路径下 :“classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/”

  • 访问方式:默认 项目根路径/静态资源名

注意事项


  • 静态资源访问原理:静态映射的 /**,也就是拦截全部请求。当请求进来,先判断Controller能否处理,不能处理的请求交给静态资源处理器,如果静态资源找不到,响应404页面
  • 修改静态资源访问前缀【当与Controller路径冲突时】
    在application.yml设置‘
    1. spring:
    2.   mvc:
    3.     static-path-pattern: /zyres/** #静态资源前缀
    复制代码
  • 修改静态资源访问路径
    在application.yml设置‘
    1.   web:
    2.     resources:
    3.       static-locations: [classpath:/img/]  #添加默认静态资源路径
    复制代码
    原先的默认路径会被覆盖,必要再配
Rest风格请求


  • Rest风格请求的核心Filter:HiddenHttpMethodFilter,表单请求会被HiddenHttpMethodFilter 拦截,获取表单的 _method值,再判断是PUT/PELETE/PATCH
  • 如果必要Springboot支持 页面表单的rest风格请求功能,必要在application.yml 启用filter功能,否则无效
    1. spring:
    2.   mvc:
    3.     hiddenmethod:
    4.       filter:
    5.         enabled: true #页面表单支持rest风格
    复制代码
视图剖析器的设置

[code]spring:  mvc:    view:      suffix: .html      prefix: /zyres/ #视图剖析器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表