lombok的好处,使用,观察 带你一探究竟lombok的编译后的class文件

说明:

Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean(简单java类),都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。

优点:

  1. 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
  2. 让代码变得简洁,不用过多的去关注相应的方法
  3. 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等

使用:

maven坐标:

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

用法:

在类上注解 @Data即可

import lombok.Data;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 笔记分享
 * @author lqa
 * @date 2019/12/3
 */
@Entity
@Table(name = "abc_share_note")
@Data
public class ShareNote {
    public static final int STATUS_NORMAL = 0;
    public static final int STATUS_PAUSE = 1;
    public static final String DEFAULT_OWNER_TYPE = "SYS";
    public static final String DEFAULT_OWNER = "0";

    /**
     * 标识
     */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    /**
     * 编号
     */
    @Column(name = "code")
    private String code;

    /**
     * 笔记标题
     */
    @Column(name = "note_title")
    private String noteTitle;


    /**
     * 笔记图片列表
     */
    @Lob
    @Column(name = "note_image1")
    private String noteImage1;

    /**
     * 视频
     */
    @Lob
    @Column(name = "note_video_url")
    private String noteVideoUrl;


    /**
     * 视频帧缩略图
     */
    @Lob
    @Column(name = "note_video_img_url")
    private String noteVideoImgUrl;

    /**
     * 笔记内容
     */
    @Lob
    @NotNull
    @Column(name = "note_content")
    private String noteContent;

    /**
     * 发布者的信息
     */
    @Column(name = "member_id")
    private int memberId;
    @Column(name = "member_code")
    private String memberCode;
    @Column(name = "member_name")
    private String memberName;
    @Column(name = "member_head_img")
    @Size(max = 255)
    private String memberHeadImg;

    /**
     * 发布时间
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "release_date")
    private Date releaseDate;

    /**
     * 发布状态(0:未发布 1:已发布)
     */
    @Column(name = "release_status")
    private int releaseStatus = STATUS_NORMAL;

    /**
     * 排序
     */
    @Column(name = "priority")
    private int priority;
    /**
     * 备注
     */
    @Column(name = "remark")
    @Size(max = 255)
    private String remark;
    /**
     * 状态
     */
    @Column(name = "status")
    private int status = STATUS_NORMAL;
    /**
     * 所有者
     */
    @NotNull
    @Size(max = 32)
    @Column(name = "owner", updatable = false)
    private String owner = DEFAULT_OWNER;
    /**
     *  所有者类型
     */
    @Size(max = 32)
    @Column(name = "owner_type", updatable = false)
    private String ownerType = DEFAULT_OWNER_TYPE;
    /**
     * 创建人/时间. 修改人/时间
     */
    @Column(name = "creator", nullable = false, updatable = false)
    private String creator;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "create_date", nullable = false, updatable = false)
    private Date creationDate = new Date();
    @Column(name = "modifier", insertable = false, updatable = true)
    private String modifier;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "modify_date", insertable = false, updatable = true)
    private Date modifyDate;
    /**
     * 内容健康识别
     * 0 健康 1其他 2垃圾广告 3涉黄低俗 4不实信息 5脏话辱骂 6有害信息 7内容抄袭 8违法违规 9诈骗信息
     */
    @Column(name = "health_status")
    private int healthStatus=STATUS_NORMAL;
    /**
     * 审核人 填写code
     */
    @Column(name = "reviewer")
    private String  reviewer;
    /**
     * 当前用户是否赞过(true 已赞过 false 未赞过)
     */
    @Transient
    private boolean praiseStatus;
    /**
     * 获赞总数量
     */
    @Transient
    private int praiseCount;
    /**
     *  当前用户是否关注过(true 已关注 false 未关注)
     */
    @Transient
    private boolean attentionStatus;

    /**
     * 浏览总次数
     */
    @Transient
    private int browseCount;
    /**
     * 评论数量
     */
    @Transient
    private int noteCommentCount;
    /**
     * 评论列表
     */
    @Transient
    private List<Map> noteComments;
    /**
     * 当前用户是否收藏(true 已收藏 false 未收藏)
     */
    @Transient
    private boolean favoriteStatus;
    /**
     * 收藏数量
     */
    @Transient
    private int favoriteCount;
    /**
     * 举报次数
     */
    @Transient
    private int reportCount;

}

对应编译后的class文件:

import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
@Table(
    name = "abc_share_note"
)
public class ShareNote {
    public static final int STATUS_NORMAL = 0;
    public static final int STATUS_PAUSE = 1;
    public static final String DEFAULT_OWNER_TYPE = "SYS";
    public static final String DEFAULT_OWNER = "0";
    @Id
    @GeneratedValue(
        strategy = GenerationType.AUTO
    )
    private int id;
    @Column(
        name = "code"
    )
    private String code;
    @Column(
        name = "note_title"
    )
    private String noteTitle;
    @Lob
    @Column(
        name = "note_image1"
    )
    private String noteImage1;
    @Lob
    @Column(
        name = "note_video_url"
    )
    private String noteVideoUrl;
    @Lob
    @Column(
        name = "note_video_img_url"
    )
    private String noteVideoImgUrl;
    @Lob
    @NotNull
    @Column(
        name = "note_content"
    )
    private String noteContent;
    @Column(
        name = "member_id"
    )
    private int memberId;
    @Column(
        name = "member_code"
    )
    private String memberCode;
    @Column(
        name = "member_name"
    )
    private String memberName;
    @Column(
        name = "member_head_img"
    )
    @Size(
        max = 255
    )
    private String memberHeadImg;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(
        name = "release_date"
    )
    private Date releaseDate;
    @Column(
        name = "release_status"
    )
    private int releaseStatus = 0;
    @Column(
        name = "priority"
    )
    private int priority;
    @Column(
        name = "remark"
    )
    @Size(
        max = 255
    )
    private String remark;
    @Column(
        name = "status"
    )
    private int status = 0;
    @NotNull
    @Size(
        max = 32
    )
    @Column(
        name = "owner",
        updatable = false
    )
    private String owner = "0";
    @Size(
        max = 32
    )
    @Column(
        name = "owner_type",
        updatable = false
    )
    private String ownerType = "SYS";
    @Column(
        name = "creator",
        nullable = false,
        updatable = false
    )
    private String creator;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(
        name = "create_date",
        nullable = false,
        updatable = false
    )
    private Date creationDate = new Date();
    @Column(
        name = "modifier",
        insertable = false,
        updatable = true
    )
    private String modifier;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(
        name = "modify_date",
        insertable = false,
        updatable = true
    )
    private Date modifyDate;
    @Column(
        name = "health_status"
    )
    private int healthStatus = 0;
    @Column(
        name = "reviewer"
    )
    private String reviewer;
    @Transient
    private boolean praiseStatus;
    @Transient
    private int praiseCount;
    @Transient
    private boolean attentionStatus;
    @Transient
    private int browseCount;
    @Transient
    private int noteCommentCount;
    @Transient
    private List<Map> noteComments;
    @Transient
    private boolean favoriteStatus;
    @Transient
    private int favoriteCount;
    @Transient
    private int reportCount;

    public ShareNote() {
    }

    public int getId() {
        return this.id;
    }

    public String getCode() {
        return this.code;
    }

    public String getNoteTitle() {
        return this.noteTitle;
    }

    public String getNoteImage1() {
        return this.noteImage1;
    }

    public String getNoteVideoUrl() {
        return this.noteVideoUrl;
    }

    public String getNoteVideoImgUrl() {
        return this.noteVideoImgUrl;
    }

    public String getNoteContent() {
        return this.noteContent;
    }

    public int getMemberId() {
        return this.memberId;
    }

    public String getMemberCode() {
        return this.memberCode;
    }

    public String getMemberName() {
        return this.memberName;
    }

    public String getMemberHeadImg() {
        return this.memberHeadImg;
    }

    public Date getReleaseDate() {
        return this.releaseDate;
    }

    public int getReleaseStatus() {
        return this.releaseStatus;
    }

    public int getPriority() {
        return this.priority;
    }

    public String getRemark() {
        return this.remark;
    }

    public int getStatus() {
        return this.status;
    }

    public String getOwner() {
        return this.owner;
    }

    public String getOwnerType() {
        return this.ownerType;
    }

    public String getCreator() {
        return this.creator;
    }

    public Date getCreationDate() {
        return this.creationDate;
    }

    public String getModifier() {
        return this.modifier;
    }

    public Date getModifyDate() {
        return this.modifyDate;
    }

    public int getHealthStatus() {
        return this.healthStatus;
    }

    public String getReviewer() {
        return this.reviewer;
    }

    public boolean isPraiseStatus() {
        return this.praiseStatus;
    }

    public int getPraiseCount() {
        return this.praiseCount;
    }

    public boolean isAttentionStatus() {
        return this.attentionStatus;
    }

    public int getBrowseCount() {
        return this.browseCount;
    }

    public int getNoteCommentCount() {
        return this.noteCommentCount;
    }

    public List<Map> getNoteComments() {
        return this.noteComments;
    }

    public boolean isFavoriteStatus() {
        return this.favoriteStatus;
    }

    public int getFavoriteCount() {
        return this.favoriteCount;
    }

    public int getReportCount() {
        return this.reportCount;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public void setNoteTitle(String noteTitle) {
        this.noteTitle = noteTitle;
    }

    public void setNoteImage1(String noteImage1) {
        this.noteImage1 = noteImage1;
    }

    public void setNoteVideoUrl(String noteVideoUrl) {
        this.noteVideoUrl = noteVideoUrl;
    }

    public void setNoteVideoImgUrl(String noteVideoImgUrl) {
        this.noteVideoImgUrl = noteVideoImgUrl;
    }

    public void setNoteContent(String noteContent) {
        this.noteContent = noteContent;
    }

    public void setMemberId(int memberId) {
        this.memberId = memberId;
    }

    public void setMemberCode(String memberCode) {
        this.memberCode = memberCode;
    }

    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }

    public void setMemberHeadImg(String memberHeadImg) {
        this.memberHeadImg = memberHeadImg;
    }

    public void setReleaseDate(Date releaseDate) {
        this.releaseDate = releaseDate;
    }

    public void setReleaseStatus(int releaseStatus) {
        this.releaseStatus = releaseStatus;
    }

    public void setPriority(int priority) {
        this.priority = priority;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public void setOwnerType(String ownerType) {
        this.ownerType = ownerType;
    }

    public void setCreator(String creator) {
        this.creator = creator;
    }

    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }

    public void setModifier(String modifier) {
        this.modifier = modifier;
    }

    public void setModifyDate(Date modifyDate) {
        this.modifyDate = modifyDate;
    }

    public void setHealthStatus(int healthStatus) {
        this.healthStatus = healthStatus;
    }

    public void setReviewer(String reviewer) {
        this.reviewer = reviewer;
    }

    public void setPraiseStatus(boolean praiseStatus) {
        this.praiseStatus = praiseStatus;
    }

    public void setPraiseCount(int praiseCount) {
        this.praiseCount = praiseCount;
    }

    public void setAttentionStatus(boolean attentionStatus) {
        this.attentionStatus = attentionStatus;
    }

    public void setBrowseCount(int browseCount) {
        this.browseCount = browseCount;
    }

    public void setNoteCommentCount(int noteCommentCount) {
        this.noteCommentCount = noteCommentCount;
    }

    public void setNoteComments(List<Map> noteComments) {
        this.noteComments = noteComments;
    }

    public void setFavoriteStatus(boolean favoriteStatus) {
        this.favoriteStatus = favoriteStatus;
    }

    public void setFavoriteCount(int favoriteCount) {
        this.favoriteCount = favoriteCount;
    }

    public void setReportCount(int reportCount) {
        this.reportCount = reportCount;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof ShareNote)) {
            return false;
        } else {
            ShareNote other = (ShareNote)o;
            if (!other.canEqual(this)) {
                return false;
            } else if (this.getId() != other.getId()) {
                return false;
            } else {
                Object this$code = this.getCode();
                Object other$code = other.getCode();
                if (this$code == null) {
                    if (other$code != null) {
                        return false;
                    }
                } else if (!this$code.equals(other$code)) {
                    return false;
                }

                Object this$noteTitle = this.getNoteTitle();
                Object other$noteTitle = other.getNoteTitle();
                if (this$noteTitle == null) {
                    if (other$noteTitle != null) {
                        return false;
                    }
                } else if (!this$noteTitle.equals(other$noteTitle)) {
                    return false;
                }

                label279: {
                    Object this$noteImage1 = this.getNoteImage1();
                    Object other$noteImage1 = other.getNoteImage1();
                    if (this$noteImage1 == null) {
                        if (other$noteImage1 == null) {
                            break label279;
                        }
                    } else if (this$noteImage1.equals(other$noteImage1)) {
                        break label279;
                    }

                    return false;
                }

                label272: {
                    Object this$noteVideoUrl = this.getNoteVideoUrl();
                    Object other$noteVideoUrl = other.getNoteVideoUrl();
                    if (this$noteVideoUrl == null) {
                        if (other$noteVideoUrl == null) {
                            break label272;
                        }
                    } else if (this$noteVideoUrl.equals(other$noteVideoUrl)) {
                        break label272;
                    }

                    return false;
                }

                Object this$noteVideoImgUrl = this.getNoteVideoImgUrl();
                Object other$noteVideoImgUrl = other.getNoteVideoImgUrl();
                if (this$noteVideoImgUrl == null) {
                    if (other$noteVideoImgUrl != null) {
                        return false;
                    }
                } else if (!this$noteVideoImgUrl.equals(other$noteVideoImgUrl)) {
                    return false;
                }

                Object this$noteContent = this.getNoteContent();
                Object other$noteContent = other.getNoteContent();
                if (this$noteContent == null) {
                    if (other$noteContent != null) {
                        return false;
                    }
                } else if (!this$noteContent.equals(other$noteContent)) {
                    return false;
                }

                if (this.getMemberId() != other.getMemberId()) {
                    return false;
                } else {
                    label250: {
                        Object this$memberCode = this.getMemberCode();
                        Object other$memberCode = other.getMemberCode();
                        if (this$memberCode == null) {
                            if (other$memberCode == null) {
                                break label250;
                            }
                        } else if (this$memberCode.equals(other$memberCode)) {
                            break label250;
                        }

                        return false;
                    }

                    Object this$memberName = this.getMemberName();
                    Object other$memberName = other.getMemberName();
                    if (this$memberName == null) {
                        if (other$memberName != null) {
                            return false;
                        }
                    } else if (!this$memberName.equals(other$memberName)) {
                        return false;
                    }

                    label236: {
                        Object this$memberHeadImg = this.getMemberHeadImg();
                        Object other$memberHeadImg = other.getMemberHeadImg();
                        if (this$memberHeadImg == null) {
                            if (other$memberHeadImg == null) {
                                break label236;
                            }
                        } else if (this$memberHeadImg.equals(other$memberHeadImg)) {
                            break label236;
                        }

                        return false;
                    }

                    Object this$releaseDate = this.getReleaseDate();
                    Object other$releaseDate = other.getReleaseDate();
                    if (this$releaseDate == null) {
                        if (other$releaseDate != null) {
                            return false;
                        }
                    } else if (!this$releaseDate.equals(other$releaseDate)) {
                        return false;
                    }

                    if (this.getReleaseStatus() != other.getReleaseStatus()) {
                        return false;
                    } else if (this.getPriority() != other.getPriority()) {
                        return false;
                    } else {
                        Object this$remark = this.getRemark();
                        Object other$remark = other.getRemark();
                        if (this$remark == null) {
                            if (other$remark != null) {
                                return false;
                            }
                        } else if (!this$remark.equals(other$remark)) {
                            return false;
                        }

                        if (this.getStatus() != other.getStatus()) {
                            return false;
                        } else {
                            Object this$owner = this.getOwner();
                            Object other$owner = other.getOwner();
                            if (this$owner == null) {
                                if (other$owner != null) {
                                    return false;
                                }
                            } else if (!this$owner.equals(other$owner)) {
                                return false;
                            }

                            Object this$ownerType = this.getOwnerType();
                            Object other$ownerType = other.getOwnerType();
                            if (this$ownerType == null) {
                                if (other$ownerType != null) {
                                    return false;
                                }
                            } else if (!this$ownerType.equals(other$ownerType)) {
                                return false;
                            }

                            Object this$creator = this.getCreator();
                            Object other$creator = other.getCreator();
                            if (this$creator == null) {
                                if (other$creator != null) {
                                    return false;
                                }
                            } else if (!this$creator.equals(other$creator)) {
                                return false;
                            }

                            label190: {
                                Object this$creationDate = this.getCreationDate();
                                Object other$creationDate = other.getCreationDate();
                                if (this$creationDate == null) {
                                    if (other$creationDate == null) {
                                        break label190;
                                    }
                                } else if (this$creationDate.equals(other$creationDate)) {
                                    break label190;
                                }

                                return false;
                            }

                            Object this$modifier = this.getModifier();
                            Object other$modifier = other.getModifier();
                            if (this$modifier == null) {
                                if (other$modifier != null) {
                                    return false;
                                }
                            } else if (!this$modifier.equals(other$modifier)) {
                                return false;
                            }

                            Object this$modifyDate = this.getModifyDate();
                            Object other$modifyDate = other.getModifyDate();
                            if (this$modifyDate == null) {
                                if (other$modifyDate != null) {
                                    return false;
                                }
                            } else if (!this$modifyDate.equals(other$modifyDate)) {
                                return false;
                            }

                            if (this.getHealthStatus() != other.getHealthStatus()) {
                                return false;
                            } else {
                                label168: {
                                    Object this$reviewer = this.getReviewer();
                                    Object other$reviewer = other.getReviewer();
                                    if (this$reviewer == null) {
                                        if (other$reviewer == null) {
                                            break label168;
                                        }
                                    } else if (this$reviewer.equals(other$reviewer)) {
                                        break label168;
                                    }

                                    return false;
                                }

                                if (this.isPraiseStatus() != other.isPraiseStatus()) {
                                    return false;
                                } else if (this.getPraiseCount() != other.getPraiseCount()) {
                                    return false;
                                } else if (this.isAttentionStatus() != other.isAttentionStatus()) {
                                    return false;
                                } else if (this.getBrowseCount() != other.getBrowseCount()) {
                                    return false;
                                } else if (this.getNoteCommentCount() != other.getNoteCommentCount()) {
                                    return false;
                                } else {
                                    Object this$noteComments = this.getNoteComments();
                                    Object other$noteComments = other.getNoteComments();
                                    if (this$noteComments == null) {
                                        if (other$noteComments != null) {
                                            return false;
                                        }
                                    } else if (!this$noteComments.equals(other$noteComments)) {
                                        return false;
                                    }

                                    if (this.isFavoriteStatus() != other.isFavoriteStatus()) {
                                        return false;
                                    } else if (this.getFavoriteCount() != other.getFavoriteCount()) {
                                        return false;
                                    } else if (this.getReportCount() != other.getReportCount()) {
                                        return false;
                                    } else {
                                        return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    protected boolean canEqual(Object other) {
        return other instanceof ShareNote;
    }

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        int result = result * 59 + this.getId();
        Object $code = this.getCode();
        result = result * 59 + ($code == null ? 43 : $code.hashCode());
        Object $noteTitle = this.getNoteTitle();
        result = result * 59 + ($noteTitle == null ? 43 : $noteTitle.hashCode());
        Object $noteImage1 = this.getNoteImage1();
        result = result * 59 + ($noteImage1 == null ? 43 : $noteImage1.hashCode());
        Object $noteVideoUrl = this.getNoteVideoUrl();
        result = result * 59 + ($noteVideoUrl == null ? 43 : $noteVideoUrl.hashCode());
        Object $noteVideoImgUrl = this.getNoteVideoImgUrl();
        result = result * 59 + ($noteVideoImgUrl == null ? 43 : $noteVideoImgUrl.hashCode());
        Object $noteContent = this.getNoteContent();
        result = result * 59 + ($noteContent == null ? 43 : $noteContent.hashCode());
        result = result * 59 + this.getMemberId();
        Object $memberCode = this.getMemberCode();
        result = result * 59 + ($memberCode == null ? 43 : $memberCode.hashCode());
        Object $memberName = this.getMemberName();
        result = result * 59 + ($memberName == null ? 43 : $memberName.hashCode());
        Object $memberHeadImg = this.getMemberHeadImg();
        result = result * 59 + ($memberHeadImg == null ? 43 : $memberHeadImg.hashCode());
        Object $releaseDate = this.getReleaseDate();
        result = result * 59 + ($releaseDate == null ? 43 : $releaseDate.hashCode());
        result = result * 59 + this.getReleaseStatus();
        result = result * 59 + this.getPriority();
        Object $remark = this.getRemark();
        result = result * 59 + ($remark == null ? 43 : $remark.hashCode());
        result = result * 59 + this.getStatus();
        Object $owner = this.getOwner();
        result = result * 59 + ($owner == null ? 43 : $owner.hashCode());
        Object $ownerType = this.getOwnerType();
        result = result * 59 + ($ownerType == null ? 43 : $ownerType.hashCode());
        Object $creator = this.getCreator();
        result = result * 59 + ($creator == null ? 43 : $creator.hashCode());
        Object $creationDate = this.getCreationDate();
        result = result * 59 + ($creationDate == null ? 43 : $creationDate.hashCode());
        Object $modifier = this.getModifier();
        result = result * 59 + ($modifier == null ? 43 : $modifier.hashCode());
        Object $modifyDate = this.getModifyDate();
        result = result * 59 + ($modifyDate == null ? 43 : $modifyDate.hashCode());
        result = result * 59 + this.getHealthStatus();
        Object $reviewer = this.getReviewer();
        result = result * 59 + ($reviewer == null ? 43 : $reviewer.hashCode());
        result = result * 59 + (this.isPraiseStatus() ? 79 : 97);
        result = result * 59 + this.getPraiseCount();
        result = result * 59 + (this.isAttentionStatus() ? 79 : 97);
        result = result * 59 + this.getBrowseCount();
        result = result * 59 + this.getNoteCommentCount();
        Object $noteComments = this.getNoteComments();
        result = result * 59 + ($noteComments == null ? 43 : $noteComments.hashCode());
        result = result * 59 + (this.isFavoriteStatus() ? 79 : 97);
        result = result * 59 + this.getFavoriteCount();
        result = result * 59 + this.getReportCount();
        return result;
    }

    public String toString() {
        return "ShareNote(id=" + this.getId() + ", code=" + this.getCode() + ", noteTitle=" + this.getNoteTitle() + ", noteImage1=" + this.getNoteImage1() + ", noteVideoUrl=" + this.getNoteVideoUrl() + ", noteVideoImgUrl=" + this.getNoteVideoImgUrl() + ", noteContent=" + this.getNoteContent() + ", memberId=" + this.getMemberId() + ", memberCode=" + this.getMemberCode() + ", memberName=" + this.getMemberName() + ", memberHeadImg=" + this.getMemberHeadImg() + ", releaseDate=" + this.getReleaseDate() + ", releaseStatus=" + this.getReleaseStatus() + ", priority=" + this.getPriority() + ", remark=" + this.getRemark() + ", status=" + this.getStatus() + ", owner=" + this.getOwner() + ", ownerType=" + this.getOwnerType() + ", creator=" + this.getCreator() + ", creationDate=" + this.getCreationDate() + ", modifier=" + this.getModifier() + ", modifyDate=" + this.getModifyDate() + ", healthStatus=" + this.getHealthStatus() + ", reviewer=" + this.getReviewer() + ", praiseStatus=" + this.isPraiseStatus() + ", praiseCount=" + this.getPraiseCount() + ", attentionStatus=" + this.isAttentionStatus() + ", browseCount=" + this.getBrowseCount() + ", noteCommentCount=" + this.getNoteCommentCount() + ", noteComments=" + this.getNoteComments() + ", favoriteStatus=" + this.isFavoriteStatus() + ", favoriteCount=" + this.getFavoriteCount() + ", reportCount=" + this.getReportCount() + ")";
    }
}

我们可以看出,这个注解可以帮我自动生成了setter/getter方法,无参构造器,toString ,equals ,canEqual,hashCode方法,还是便捷通用的,代码上也是清爽便捷很多。

关于成员变量isXxx的说明,在之前的老版本之前,列如isTrue字段在生成setter/getter方法上的时候,编译会把is拿掉导致生成的不是我们想要的变量,在此版本是不会发生的,下面给出了编辑后的class文件和java文件,在阿里规范中,也尽量不要使用带有is开头的boolean的成员属性。

原java文件

    /**
     * 是否管理员  0否1是
     */
    @Column(name = "is_admin")
    private int isAdmin = 0;

class文件

public int getIsAdmin() {
        return this.isAdmin;
    }
public void setIsAdmin(int isAdmin) {
        this.isAdmin = isAdmin;
    }

那么Lombok的工作原理:

会发现在Lombok使用的过程中,只需要添加相应的注解,无需再为此写任何代码。自动生成的代码到底是如何产生的呢?

核心之处就是对于注解的解析上。JDK5引入了注解的同时,也提供了两种解析方式。

  • 运行时解析

运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样就可以通过反射拿到该注解。java.lang,reflect反射包中提供了一个接口AnnotatedElement,该接口定义了获取注解信息的几个方法,Class、Constructor、Field、Method、Package等都实现了该接口,对反射熟悉的朋友应该都会很熟悉这种解析方式。

  • 编译时解析

编译时解析有两种机制,分别简单描述下:

1)Annotation Processing Tool

apt自JDK5产生,JDK7已标记为过期,不推荐使用,JDK8中已彻底删除,自JDK6开始,可以使用Pluggable Annotation Processing API来替换它,apt被替换主要有2点原因:

  • api都在com.sun.mirror非标准包下
  • 没有集成到javac中,需要额外运行

2)Pluggable Annotation Processing API

JSR 269自JDK6加入,作为apt的替代方案,它解决了apt的两个问题,javac在执行的时候会调用实现了该API的程序,这样我们就可以对编译器做一些增强,这时javac执行的过程如下:

1

Lombok本质上就是一个实现了“JSR 269 API”的程序。在使用javac的过程中,它产生作用的具体流程如下:

  1. javac对源代码进行分析,生成了一棵抽象语法树(AST)
  2. 运行过程中调用实现了“JSR 269 API”的Lombok程序
  3. 此时Lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
  4. javac使用修改后的抽象语法树(AST)生成字节码文件,即给class增加新的节点(代码块)

拜读了Lombok源码,对应注解的实现都在HandleXXX中,比如@Getter注解的实现时HandleGetter.handle()。还有一些其它类库使用这种方式实现,比如Google AutoDagger等等。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若光672

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值