写点什么

SpringBoot 的实体类中常用的注解

作者:Java学术趴
  • 2022-10-16
    北京
  • 本文字数:2375 字

    阅读完需:约 1 分钟

SpringBoot的实体类中常用的注解

👨‍🎓作者:Java 学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java 学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号 Java 学术趴联系小编。


☠️每日毒鸡汤:堕落的一天


👋大家好!我是你们的老朋友Java学术趴。最近看了一下 SpringBoot2 的课程,发现好多的注解并不是很了解,只是简单的会用,但是真是发生的作用却不知道,最近花了一些时间把这些注解进行了一下整理,针对不同的层级进行了细致的划分,最近几天会依次给大家更新关于注解的内容,对大家有帮助的话点赞支持一下哦!

SpringBoot 穷启动类中常用的注解

使用 Spring 开发时,进行配置主要有两种方式,一是 xml 的方式,二是 java config 的方式。Spring 技术自身也在不断的发展和改变,从当前 Springboot 的火热程度来看,java config 的应用是越来越广泛了,在使用 java config 的过程当中,我们不可避免的会有各种各样的注解打交道,所有,注解在实际开发中的地位很高。

1. SpringBoot 实体类中的注解

1.1 lombok 中的注解

1.1.1 @Getter/@Setter

@Getter/@Setter : 注解在类上, 为类提供读写属性。

1.1.2 @ToString

@ToString : 注解在类上, 为类提供 toString() 方法。

1.1.3 @EqualsAndHashCode

@EqualsAndHashCode : 注解在类上, 为类提供 equals() 和 hashCode() 方法。


在类是继承父类的情况下,EqualsAndHashCode 实则就是在比较两个对象的属性;


  • @EqualsAndHashCode(callSuper = false) 时不会比较其继承的父类的属性可能会导致错误判断;

  • @EqualsAndHashCode(callSuper = true) 时会比较其继承的父类的属性;

1.1.4 @NoArgsConstructor

@NoArgsConstructor :注解在实体类上, 为类提供无参构造方法。

1.1.5 @RequiredArgsConstructor

@RequiredArgsConstructor :注解在实体类上,提供有指定参数的构造方法。

1.1.6 @AllArgsConstructor

@AllArgsConstructor : 注解在实体类上,提供全参构造方法。

1.1.7 @NonNull

@NonNull : 注解在参数上, 如果获取到的这个参数为 null , 就会报出异常, throw new NullPointException(参数名)。 注意 :这个注解是注释在实体类的属性上,而不是实体类上。

1.1.8 @Data

@Data :@Data 相当于 @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode 这 5 个注解的合集。写这一个注解就不用写其中包含的这 5 个注解了。


注意:使用 @Date 会生成一无参构造方法,如果想在加一个有参构造方法,需要添加 @AllArgsConstructor 注解。

1.1.9 @Builder

@Builder : 注解在实体类上, 为类提供一个内部的 Builder。

1.1.10 @Synchronized

@Synchronized : 注解在方法上, 为方法提供同步锁。 注意:这个是注解在方法上,而不是类上。

1.1.11 @Log4j

@Log4j : 注解在各个层,提供一个属性名为 log 的 log4j 的日志对象。之后就可以在任何地方直接使用 log.info()打印日志。


以前使用打印日志,必须先创建一个打印日志的 Logger 对象,调用 Logger 对象中的 info()方法进行打印。



private final Logger logger = LoggerFactory.getLogger(当前类名.class);logger.info("方法被触发了");
复制代码


加入了 @Log4j 注解之后,直接使用 log.info() 方法打印日志信息



log.info("方法被触发了");
复制代码

1.1.12 @Slf4j

@Slf4j : 注解在各个层,提供一个属性名为 log 的 Slf4j 的日志对象。他的用法和上面的 @Log4 一样。

1.1.13 @Accessors

@Accessors : Accessor 的中文含义是存取器。这个注解是针对实体类中的 getter 与 setter 方法而言的。


包含的属性:



fluent 属性:参数值为 true/false


  • 默认为 false,当设置为 true 时,表示生成的 setter 和 getter 方法没有前缀 set 和 get,且 setter 方法返回的是当前对象。



@Data@Accessors(fluent = true)public class Person { private int id; private String name; // 生成的getter和setter方法如下,方法体略 // getter省略了get public int id() {} // setter省略了set,并且返回值是:Person对象 public Person id(int id) {} public String name() {} public Person name(String name) {}}
复制代码


  • getter 方法不是 getId(){},而是 id(){};

  • setter 方法不是 void setId(){},而是 Person id(int id){}


chain 属性:参数值为 true/false


  • 默认为 false (注:但是当 fluent 为 true 时,其默认为 true) ,当为 false 的时候,生成的 setter 方法是 void 类型;如果设置为 true 生成的 setter 方法返回 this(当前对象)。



@Data@Accessors(chain = true)public class Person { private int id; private String name; // 生成的setter方法如下,方法体略 public Person setId(int id) {} public Person setName(String name) {}}
复制代码


这样写的好处:


  • 以前实体类的 setter()方法返回值是:void。当给实体类中的多个参数赋值的时候必须分开写,很麻烦。



Person.setName("张三"); Person.setAge(20);
复制代码


  • 使用 @Accessors(chain = true) 之后,setter()方法的返回值是该实例对象,所以此时可以连续调用 setter()



Person.setName("张三").setAge(20);
复制代码


prefix 属性:参数为 String 类型


  • 可以指定前缀,生成 getter 和 setter 方法时会去掉指定的前缀(遵守驼峰命名)



@Data@Accessors(prefix = "zqr")class Person { private int zqrId; private String zqrName; // 生成的getter和setter方法如下,方法体略 public int getId() {} public void setId(int id) {} public String getName() {} public void setName(String name) {}}
复制代码


相当于字符串截取功能,在生成 getter 和 setter 方法的时候,会自动截取去除指定前缀,然后加上 get 与 set;


如上代码,生成的不是 getZqrId(),而是 getId()。遵守驼峰命名规则。

发布于: 刚刚阅读数: 3
用户头像

Java学术趴

关注

还未添加个人签名 2022-07-02 加入

还未添加个人简介

评论

发布
暂无评论
SpringBoot的实体类中常用的注解_10月月更_Java学术趴_InfoQ写作社区