SpringBoot之Lombok和Initailizr还有yaml详细讲解

499 阅读8分钟

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]

使用文档

官方文档:yaml.org/

yaml for java: www.cnblogs.com/strongmore/…

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