目录
SpringBoot--Lombok
Lombok 介绍
● Lombok 作用
● SpringBoot 和IDEA 官方支持
Lombok 常用注解
Lombok 应用实例
代码实现
在pom.xml 引入lombok
修改Furn.java 使用Lombok 注解简化代码,
解读
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Setter
@Getter
@Data
启动MainApp.java , 完成测试
在idea 安装lombok 插件,
演示使用Lombok 支持日志输出( 建议使用slf4j)
application.properties填写
修改HelloController.java
Spring Initailizr
Spring Initailizr 介绍
● Spring Initailizr 作用
方式1: IDEA 创建
2. 选择Spring Initializr
3. 项目的设置
4. 选择需要的开发场景
5. 项目创建好后,自动生成启动类和单元测试代码等
6. 说明:
方式2: start.spring.io 创建
注意事项和细节
1. 如果通过Spring Initailizr 的pom.xml 爆红
2. 解决方案, 指定版本和当前的springboot 一致,刷新maven 即可解决
SpringBoot--yaml
yaml 介绍
- 基本说明
- 解读
使用文档
yaml 基本语法
数据类型
字面量
对象
1. 对象:键值对的集合, 比如map、hash、set、object
2. 举例说明编辑
数组
1. 数组:一组按次序排列的值, 比如array、list、queue
2. 举例说明
yaml 应用实例
需求图解
代码实现
yaml 使用细节
SpringBoot--Lombok
Lombok 介绍
● Lombok 作用
1. 简化JavaBean 开发, 可以使用Lombok 的注解让代码更加简洁
2. Java 项目中,很多没有技术含量又必须存在的代码:POJO 的getter/setter/toString;异常处理;I/O 流的关闭操作等等,这些代码既没有技术含量,又影响着代码的美观,Lombok应运而生
● SpringBoot 和IDEA 官方支持
1. IDEA 2020 已经内置了Lombok 插件
2. SpringBoot 2.1.x 之后的版本也在Starter 中内置了Lombok 依赖
Lombok 常用注解
Lombok 应用实例
需求说明使用Lombok 简化Furn.java 代码, 让代码简洁高效
代码实现
在pom.xml 引入lombok
<!-- 引入lombok, 版本在spring-boot-dependencies-2.5.3.pom 指定了, 把光标放在
lombok ctrl+b 可以看到-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
-----------------------------------------看对应的版本---------------------------------------------
修改Furn.java 使用Lombok 注解简化代码,
提示:可以通过idea 自带的反编译功能, 看Furn.class 的源码, 就可以看到生成的完整代码.
@Component
@ConfigurationProperties(prefix = "furn01")
//@ToString //在编译时,生成toString, 默认情况下,会生成一个无参构造器
/**
* 说明:
* 1. Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode}
* 2. @Data 注解等价使用了 如下注解 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
* 3. @RequiredArgsConstructor : 单独的说一下:
*/
//@Data
//说明: @NoArgsConstructor 在编译时,会生成无参构造器, 前面老师说过,默认情况下,会生成一个无参构造器
//说明:当我们有其它构造器生成时,如果你希望仍然有无参构造器就需要使用@NoArgsConstructor指定一下
// ,否则就会覆盖无参构造器,从而代码错误
@NoArgsConstructor
//说明:@AllArgsConstructor 在编译时,会生成全参构造器
@AllArgsConstructor
@ToString
@Setter
@Getter
public class Furn {
private Integer id;
private String name;
private Double price;
}
解读
@NoArgsConstructor
说明: @NoArgsConstructor 在编译时,会生成无参构造器, 默认情况下,会生成一个无参构造器
注意:当我们有其它构造器生成时,如果你希望仍然有无参构造器就需要使用@NoArgsConstructor指定一下,否则就会覆盖无参构造器,从而代码错误
@AllArgsConstructor
说明:@AllArgsConstructor 在编译时,会生成全参构造器
@ToString
如名其意 加上这个是后会生成重写toString方法
@Setter
如名其意 加上这个是后会生成重写set方法
@Getter
如名其意 加上这个是后会生成重写get方法
@Data
说明:
1. Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode}
2. @Data 注解等价使用了 如下注解 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
3. @RequiredArgsConstructor : 单独的说一下:
----------------反编译, 看源码-----------
启动MainApp.java , 完成测试
在idea 安装lombok 插件,
不装插件也可以用基本的注解,比如@Data @Getter 等, 但是不能使用其扩展功能, 比如日志输出..., 所以我们还是安装一下,也比较简单
演示使用Lombok 支持日志输出( 建议使用slf4j)
application.properties填写
#设置Furn的属性k-v
#前面的 furn01 是用于指定/区别不同的绑定对象, 这样可以再绑定Furn bean属性值时
#通过furn01 前缀进行区分
#furn01.id 中的id 就是你要绑定的 Furn bean的属性名
furn01.id=100
furn01.name=TV~~\u7535\u89c6\u673a
furn01.price=1000.9x
修改HelloController.java
注意这里之所以可以读取到文件里面的K-V是我们在Fuen.java类中是加了前面有详细的
@ConfigurationProperties(prefix = "furn01")
@Slf4j
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "hello, spring boot";
}
@Autowired
Furn furn;
@RequestMapping("/furn")
@ResponseBody
public Furn furn() {
log.info("furn = " + furn);
//占位用法
log.info("furn = {} ", furn);
return furn;
}
}
Spring Initailizr
Spring Initailizr 介绍
● Spring Initailizr 作用
1. 程序员通过Maven Archetype 来生成Maven 项目,项目原型相对简陋, 需要手动配置, 比较灵活.
2. 通过Spring 官方提供的Spring Initializr 来构建Maven 项目,能完美支持IDEA 和Eclipse,让程序员来选择需要的开发场景(starter),还能自动生成启动类和单元测试代码,
3. Spring Initailizr 对Idea 版本有要求同时还要走网络, 我自己还是习惯用, Maven Archetype 来生成Maven 项目 注重演示
方式1: IDEA 创建
2. 选择Spring Initializr
3. 项目的设置
4. 选择需要的开发场景
5. 项目创建好后,自动生成启动类和单元测试代码等
6. 说明:
因为没有配置数据库连接信息,启动SpringBoot 应用程序会错误提示(如图), ,程序员根据项目需要进行配置(比如数据库连接设置等), 进行业务开发即可
方式2: start.spring.io 创建
注意事项和细节
1. 如果通过Spring Initailizr 的pom.xml 爆红
2. 解决方案, 指定版本和当前的springboot 一致,刷新maven 即可解决
SpringBoot--yaml
yaml 介绍
- 基本说明
1、YAML 是"YAML Ain't a Markup Language"(YAML 不是一种标记语言) 的递归缩写。在开发
的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),
是为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名
【百度百科】
- 解读
1、YAML 以数据做为中心,而不是以标记语言为重点
2、YAML 仍然是一种标记语言, 但是和传统的标记语言不一样, 是以数据为中心的标记语
言.
3、YAML 非常适合用来做以数据为中心的配置文件[springboot : application.yml]
使用文档
官方文档:https://yaml.org/
yaml for java: https://www.cnblogs.com/strongmore/p/14219180.html
yaml 基本语法
1. 形式为key: value;注意: 后面有空格
2. 区分大小写
3. 使用缩进表示层级关系
4. 缩进不允许使用tab,只允许空格[有些地方也识别tab , 推荐使用空格]
5. 缩进的空格数不重要,只要相同层级的元素左对齐即可
6. 字符串无需加引号
7. yml 中, 注释使用#
数据类型
字面量
1. 字面量:单个的、不可再分的值。date、boolean、string、number、null
2. 保存形式为key: value 如图
对象
1. 对象:键值对的集合, 比如map、hash、set、object
行内写法: k: {k1:v1,k2:v2,k3:v3}
monster: {id: 100,name: 牛魔王}
#或换行形式
k:
k1: v1
k2: v2
k3: v3
monster:
id: 100
name: 牛魔王
2. 举例说明
数组
1. 数组:一组按次序排列的值, 比如array、list、queue
行内写法: k: [v1,v2,v3]
hobby: [打篮球, 打乒乓球, 踢足球]
#或者换行格式
k:
- v1
- v2
- v3
hobby:
- 打篮球
- 打乒乓球
- 踢足球
2. 举例说明
yaml 应用实例
需求: 使用yaml 配置文件和JavaBean 进行数据绑定, 体会yaml 使用方式
需求图解
1. 创建项目configuration , 完成yaml 的使用
2. 运行效果
代码实现
1. 创建一个新的SpringBoot 项目- configuration ,使用灵活配置方式创建项目
2. 在pom.xml 引入lombok, 并切换一下springboot 版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 引入lombok, 版本在spring-boot-dependencies-2.5.3.pom 指定了-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
3. 创建\bean\Car.java
提醒
一个小细节: 创建的bean 需要在SpringBootApplication 包或者其子包, 否则不会被默认扫描, 同时也不能完全使用lombok 的相关简化注解.
@ToString
@Data
public class Car {
private String name;
private Double price;
}
4. 创建bean\Monster.java
@ConfigurationProperties(prefix = "monster")
@Component
@ToString
@Data
public class Monster {
private Integer id;
private String name;
private Integer age;
private Boolean isMarried;
private Date birth;
private Car car;
private String[] skill;
private List<String> hobby;
private Map<String, Object> wife;
private Set<Double> salaries;
private Map<String, List<Car>> cars;
}
5. 创建resources/application.yml, 演示各种写法.
提醒: 编写application.yml 时, 这些Bean 的字段是可以通过安装插件或jar 来自动提示的, 后面在说, 现在先苦后甜.
monster:
id: 100
name: "牛魔王~~"
age: 500
isMarried: true
birth: 2000/10/10
#对象
# car: {name: 宝马, price: 200000} #行内格式
car: #换行格式
name: 宝马~
price: 300000
#数组
# skill: [芭蕉扇, 牛魔拳] #行内格式
skill:
- 芭蕉扇~
- 牛魔拳~
# hobby: [喝酒, 吃肉] #行内格式
hobby:
- 喝酒~
- 吃肉~
#map-属于对象
# wife: {no1: 玉面狐狸, no2: 铁扇公主} #行内风格
wife:
no1: 玉面狐狸~
no2: 铁扇公主~
# salaries: [10000,20000] #行内风格
salaries:
- 10000
- 20000
cars: #因为cars k-v v是list<Car> 所以我们使用换行风格
group1:
- {name: 奔驰, price: 300000}
- name: 保时捷
price: 400000
group2:
- {name: 奔驰~, price: 100000}
- name: 保时捷~
price: 500000
6. 创建HiController.java
@RestController
public class HiController {
@Resource
private Monster monster;
@RequestMapping("/monster")
public Monster monster() {
return monster;
}
}
7. 启动项目,完成测试
yaml 使用细节
1. 如果application.properties 和application.yml 有相同的前缀值绑定, 则application.properties 优先级高, 开发时,应当避免
2. 字符串无需加引号, 这个在前面已经演示了, 如果你用" " 或者' ' 包起来, 也可以
3. 解决yaml 配置文件,不提示字段信息问题
1) 如图, 大家可以知道,在编写application.yml 文件时,没有提示Monster 的字段信息,
非常不方便
2) 在pom.xml 加入spring-boot-configuration-processor 依赖, 可以从spring-boot-reference.pdf 拷贝
<!-- 引入yaml 文件提示, 可以看到JavaBean 字段提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4) 对application.yml 文件编辑,就会提示字段, 提示: 输入你在Bean 配置的prefix 名字就会提示.
5) 提示: 如果还没有提出提示, 可以安装一个yaml 插件来搞定 .
注意要重启iead