ToB企服应用市场:ToB评测及商务社交产业平台
标题:
SpringBoot学习总结
[打印本页]
作者:
千千梦丶琪
时间:
2024-5-24 13:57
标题:
SpringBoot学习总结
SpringBoot笔记
SpringBoot文档
官网:
https://spring.io/projects/spring-boot
学习文档:
https://docs.spring.io/spring-boot/docs/current/reference/html/
在线API:
https://docs.spring.io/spring-boot/docs/current/api/
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 是一个根注解,下面有许多扩展注解
例如 @ConditionalOnBean
@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}
复制代码
换行写法
k:
k1: v2
k2: v2
k3: v3
复制代码
数组 array,list,queue
行内写法
k: [v1,v2,v3]
复制代码
换行写法
k:
-v2
-v2
-v3
复制代码
注意事项:
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/ #视图剖析器
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4