Home Tags Posts tagged with "@Data"

@Data

在进行ssm框架学习的时候,发现有人使用@Data注解方法,了解到这个注解是Lambok里面的,遂记录

Lombok浅析

简介:

lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码,lombok能够达到的效果就是在源码中不需要写一些通用的方法,但是在编译生成的字节码文件中会帮我们生成这些方法。

Lambok安装及配置:

IDEA—setting—Plugins—Lombok插件安装

 

同样我们在Settings设置页面,我们点击Build,Execution,Deployment–>选择Compiler–>选中Annotation Processors,然后在右侧勾选Enable annotation processing即可。

lombok插件的使用

  1. 使用前我们需要说明的是安装的插件只是一个调用,就像我们使用maven插件一样,本机需要安装maven才行。我们在使用lombok前也需要添加lombok的依赖。lombok的版本一直在更新,大家可以在百度搜索框输入lombok maven找到最新的依赖版本。

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

    IntelliJ IDEA lombok插件的安装和使用
  2. 接下来我们编辑一个实体类Student,添加三个属性,最后在类上添加@Data属性,这个注解可以帮我们在.class文件中生成类中所有属性的get/set方法、equals、canEqual、hashCode、toString方法等。

    IntelliJ IDEA lombok插件的安装和使用
  3. 那么编辑完代码后我们如何查看生成的方法呢?在菜单栏点击View–>Tool Windows–>Structure,便可以看到类中所有的方法了,这些都是lombok帮我自动生成的。

    IntelliJ IDEA lombok插件的安装和使用
    IntelliJ IDEA lombok插件的安装和使用

    END

    注解解析:Lombok的使用方法只需在对用类或方法添加对应注解即可

    注解种类:

    @Setter

    @Getter

    @Data

    @Log(这是一个泛型注解,具体有很多种形式)

    @AllArgsConstructor

    @NoArgsConstructor

    @EqualsAndHashCode

    @NonNull

    @Cleanup

    @ToString

    @RequiredArgsConstructor

    @Value

    @SneakyThrows

    @Synchronized

    注解详解:
    @Log:有如下种类:具体参考官方文档:

    https://projectlombok.org/features/log

    @CommonsLog

    Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);

    @Flogger

    Creates private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();

    @JBossLog

    Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);

    @Log

    Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());

    @Log4j

    Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);

    @Log4j2

    Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);

    @Slf4j

    Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

    @XSlf4j

    Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

     

    默认情况下,记录器的主题(或名称)将是使用注释进行@Log注释的类的类名称。这可以通过指定topic参数来定制。例如:@XSlf4j(topic=”reporting”)。

    @Getter,@Setter:

    该注解使用在类或者属性上,该注解可以使用在类上也可以使用在属性上。生成的getter遵循布尔属性的约定。例如:boolean类型的Foo,getter方法为isFoo而不是getFoo在使用该注解时,会默认生成一个无参构造。和对应的getter, setter方法 。

     

    以下为官网样例:

     

     

    @Data:

    该注解使用在类上,该注解是最常用的注解,它结合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本质上使用@Data注解,类默认@ToString和@EqualsAndHashCode以及每个字段都有@Setter和@getter。该注解也会生成一个公共构造函数,可以将任何@NonNull和final字段作为参数。虽然@Data注解非常有用,但是它没有与其他注解相同的控制粒度。@Data提供了一个可以生成静态工厂的单一参数,将staticConstructor参数设置为所需要的名称,Lombok自动生成的构造函数设置为私有,并提供公开的给定名称的静态工厂方法。 @Data注解是lombok.jar包下的注解,该注解通常用在实体bean上,不需要写出set和get方法,但是具备实体bean所具备的方法,简化编程提高变成速度。注意:项目中一定要引入lombok.jar!!

     

    以下为官网样例:

    Lombok annotated code:

    @Data(staticConstructor=”of”)

    public class Company {

    private final Person founder;

    private String name;

    private List<Person> employees;

    }

    Equivalent Java source code:

    public class Company {

    private final Person founder;

    private String name;

    private List<Person> employees;

    private Company(final Person founder) {

    this.founder = founder;

    }

    public static Company of(final Person founder) {

    return new Company(founder);

    }

    public Person getFounder() {

    return founder;

    }

    public String getName() {

    return name;

    }

    public void setName(final String name) {

    this.name = name;

    }

    public List<Person> getEmployees() {

    return employees;

    }

    public void setEmployees(final List<Person> employees) {

    this.employees = employees;

    }

    @java.lang.Override

    public boolean equals(final java.lang.Object o) {

    if (o == this) return true;

    if (o == null) return false;

    if (o.getClass() != this.getClass()) return false;

    final Company other = (Company)o;

    if (this.founder == null ? other.founder != null : !this.founder.equals(other.founder)) return false;

    if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;

    if (this.employees == null ? other.employees != null : !this.employees.equals(other.employees)) return false;

    return true;

    }

    @java.lang.Override

    public int hashCode() {

    final int PRIME = 31;

    int result = 1;

    result = result * PRIME + (this.founder == null ? 0 : this.founder.hashCode());

    result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());

    result = result * PRIME + (this.employees == null ? 0 : this.employees.hashCode());

    return result;

    }

    @java.lang.Override

    public java.lang.String toString() {

    return “Company(founder=” + founder + “, name=” + name + “, employees=” + employees + “)”;

    }

    }

    @NonNull:

    该注解使用在属性上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出NullPointerException。 该注解会默认是生成一个无参构造。

     

    @EqualsAndHashCode:

    该注解使用在类上,该注解在类级别注释会同时生成equals和hashCode。

     

     

    @toString

    该注解使用在类上,该注解默认生成字段以名称-值的形式输出。

     

     

    @Value

    这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。 没有setter

     

     

    想了解更多,可以去官方文档查看:http://jnb.ociweb.com/jnb/jnbJan2010.html
    ————————————————
    版权声明:本文为CSDN博主「小左的博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/longloveqing/article/details/81539749