SpringBoot:整合Lombok

一,Lombok

    Lombok对代码在内存中进行整合,提供了实体类的get/set方法自生成和类日志的快捷处理方式。使代码更加简洁

二,使用Lombok前实体代码和业务代码

    * 从代码中可以看到日志声明和实例声明都需要手动处理,

package com.gupao.springboot.test.controller;

import com.alibaba.fastjson.JSONObject;
import com.gupao.springboot.test.entitys.UserVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author pj_zhang
 * @create 2018-12-23 23:06
 **/
@RestController
public class ErrorController {

    private Logger logger = LoggerFactory.getLogger(ErrorController.class);

    @RequestMapping("/user")
    public UserVO calculate(String name, Integer age) {
        UserVO userVO = new UserVO();
        userVO.setName(name);
        userVO.setAge(age);
        logger.info(JSONObject.toJSONString(userVO));
        return userVO;
    }
}
package com.gupao.springboot.test.entitys;

/**
 * @author pj_zhang
 * @create 2018-12-24 21:18
 **/
public class UserVO {
    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserVO{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

三,使用Lombok进行处理

    1,引入Lombok依赖

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

    ,2,去除VO类的get/set方法,添加Lombok注解,查看业务类,发现并没有生效,这是因为没有添加Lombok插件

package com.gupao.springboot.test.entitys;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * @author pj_zhang
 * @create 2018-12-24 21:18
 **/
@Setter
@Getter
@ToString
public class UserVO {
    private String name;

    private Integer age;
}

    3,安装Lombok插件(以IDEA进行演示)

        * File --> Settings -->Plugins

        * 点击上图中圈出来的Browers repositories,进入弹出页面后搜索Lambok,点击Instanll按钮进行安装(此处已经安装完成),安装完成暂时不要重启;右下方圈出来区域表示Lombok支持的注解,其中包括实体类需要的set/get/equals/hashcode/toString/构造器,以及业务类需要的日志,具体可点击进入官网进行查看:https://projectlombok.org/features/all

        * File --> Settings -->Plugins,上一步安装成功后,在此处可以查到lombok插件

        * File --> Settings -->Build,Execution --> Compiler --> Annotation Processors,选中标中区域后重启IDEA

    4,重新使用Lombok注解进行代码简化处理

        * 实体类

package com.gupao.springboot.test.entitys;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

/**
 * @author pj_zhang
 * @create 2018-12-24 21:18
 **/
// get方法
@Setter
// set方法
@Getter
// 使用日志注解, 反编译class文件展示logger效果
@Slf4j
public class UserVO {
    private String name;

    private Integer age;

    @Override
    public String toString() {
        log.info(name + "------" + age);
        return name;
    }
}

        * 业务类

package com.gupao.springboot.test.controller;

import com.alibaba.fastjson.JSONObject;
import com.gupao.springboot.test.entitys.UserVO;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author pj_zhang
 * @create 2018-12-23 23:06
 **/
@RestController
// Lombok自带的日志注解
@Slf4j
public class ErrorController {

    @RequestMapping("/user")
    public UserVO calculate(String name, Integer age) {
        UserVO userVO = new UserVO();
        userVO.setName(name);
        userVO.setAge(age);
        // 不用定义logger, 直接通过log进行调用
        log.info(JSONObject.toJSONString(userVO));
        return userVO;
    }
}

        * 测试结果,从下图中可以看到,程序正常运行,而代码已经通过Lambok有所精简

        * 通过反编译class文件查看通过Lombok处理后的实体类

             -- 从下面文件中可以看到,Lombok的@Setter和@Getter注解已经对全部属性生成了get/set方法,@Slf4j注解也对应生成了log4j包下的日志对象Logger,整体生成的字节码文件与全部手写生成的实体类完全一致

             -- 正因为编译后的class文件与不使用Lambok进行处理的文件内容完全一致,所以在生产环境不需要使用Lambok插件对其进行支持,因为Lambok只是在开发阶段简化开发的工具插件,而生产环境则是对class文件进行部署。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.gupao.springboot.test.entitys;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserVO {
    private static final Logger log = LoggerFactory.getLogger(UserVO.class);
    private String name;
    private Integer age;

    public UserVO() {
    }

    public String toString() {
        log.info(this.name + "------" + this.age);
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

    public Integer getAge() {
        return this.age;
    }
}

猜你喜欢

转载自blog.csdn.net/u011976388/article/details/85239750