SpringBoot - Lombok使用详解5(@log、@Buinder、@SneakyThrows、@Synchronized)
七、Lombok注解详解(5)
12,@log
1 @CommonsLog
2 private static final org.apache.commons.logging.Log log =
3 org.apache.commons.logging.LogFactory.getLog(LogExample.class);
4
5 @JBossLog
6 private static final org.jboss.logging.Logger log =
7 org.jboss.logging.Logger.getLogger(LogExample.class);
8
9 @Log
10 private static final java.util.logging.Logger log =
11 java.util.logging.Logger.getLogger(LogExample.class.getName());
12
13 @Log4j
14 private static final org.apache.log4j.Logger log =
15 org.apache.log4j.Logger.getLogger(LogExample.class);
16
17 @Log4j2
18 private static final org.apache.logging.log4j.Logger log =
19 org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
20
21 @Slf4j
22 private static final org.slf4j.Logger log =
23 org.slf4j.LoggerFactory.getLogger(LogExample.class);
24
25 @XSlf4j
26 private static final org.slf4j.ext.XLogger log =
27 org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
1 // 使用注解
2 @Log
3 public class LogExample {
4 public static void main(String... args) {
5 log.error("Something's wrong here");
6 }
7 }
8
9 // 不使用注解
10 public class LogExample {
11 private static final java.util.logging.Logger log =
12 java.util.logging.Logger.getLogger(LogExample.class.getName());
13
14 public static void main(String... args) {
15 log.error("Something's wrong here");
16 }
17 }
13,@Buinder
1 package com.example.demo;
2
3 import lombok.Builder;
4 import lombok.Singular;
5
6 import java.util.Set;
7
8 @Builder
9 public class BuilderExample {
10 private String name;
11 private int age;
12 @Singular
13 private Set<String> occupations;
14 }
(2)上面相当于如下传统的 Java 代码:
1 package com.example.demo;
2
3 import java.util.Collection;
4 import java.util.Set;
5
6 public class BuilderExample {
7 private String name;
8 private int age;
9 private Set<String> occupations;
10
11 BuilderExample(String name, int age, Set<String> occupations) {
12 this.name = name;
13 this.age = age;
14 this.occupations = occupations;
15 }
16
17 public static BuilderExampleBuilder builder() {
18 return new BuilderExampleBuilder();
19 }
20
21 public static class BuilderExampleBuilder {
22 private String name;
23 private int age;
24 private java.util.ArrayList<String> occupations;
25
26 BuilderExampleBuilder() {
27 }
28
29 public BuilderExampleBuilder name(String name) {
30 this.name = name;
31 return this;
32 }
33
34 public BuilderExampleBuilder age(int age) {
35 this.age = age;
36 return this;
37 }
38
39 public BuilderExampleBuilder occupation(String occupation) {
40 if (this.occupations == null) {
41 this.occupations = new java.util.ArrayList<String>();
42 }
43
44 this.occupations.add(occupation);
45 return this;
46 }
47
48 public BuilderExampleBuilder occupations(Collection<? extends String> occupations) {
49 if (this.occupations == null) {
50 this.occupations = new java.util.ArrayList<String>();
51 }
52
53 this.occupations.addAll(occupations);
54 return this;
55 }
56
57 public BuilderExampleBuilder clearOccupations() {
58 if (this.occupations != null) {
59 this.occupations.clear();
60 }
61
62 return this;
63 }
64
65 public BuilderExample build() {
66 //complicated switch statement to produce a compact properly sized immutable set omitted
67 // go to https://projectlombok.org/features/Singular-snippet.html to see it.
68 Set<String> occupations = ...;
69 return new BuilderExample(name, age, occupations);
70 }
71
72 @java.lang.Override
73 public String toString() {
74 return "BuilderExample.BuilderExampleBuilder(name = " + this.name + ", age = "
75 + this.age + ", occupations = " + this.occupations + ")";
76 }
77 }
78 }
(3)下面是一个简单的测试样例:
1 BuilderExample be = BuilderExample.builder()
2 .name("hangge")
3 .age(123)
4 .occupation("ABC")
5 .occupation("DEF")
6 .build();
7
8 return be.toString();
14,@SneakyThrows
1 // 使用注解
2 public class SneakyThrows implements Runnable {
3 @SneakyThrows(UnsupportedEncodingException.class)
4 public String utf8ToString(byte[] bytes) {
5 return new String(bytes, "UTF-8");
6 }
7
8 @SneakyThrows
9 public void run() {
10 throw new Throwable();
11 }
12 }
13
14 // 不使用注解
15 public class SneakyThrows implements Runnable {
16 public String utf8ToString(byte[] bytes) {
17 try{
18 return new String(bytes, "UTF-8");
19 }catch(UnsupportedEncodingException uee){
20 throw Lombok.sneakyThrow(uee);
21 }
22 }
23
24 public void run() {
25 try{
26 throw new Throwable();
27 }catch(Throwable t){
28 throw Lombok.sneakyThrow(t);
29 }
30 }
31 }
15,@Synchronized
该注解用在类方法或者实例方法上,效果和 synchronized 关键字相同,区别在于锁对象不同。对于类方法和实例方法,它俩区别在于:
- synchronized 关键字的锁对象分别是“类的 class 对象”和“this 对象”
- @Synchronized 的锁对象分别是“私有静态 final 对象 lock”和“私有 final 对象 lock”。当然,也可以自己指定锁对象。
1 // 使用注解
2 public class Synchronized {
3 private final Object readLock = new Object();
4
5 @Synchronized
6 public static void hello() {
7 System.out.println("world");
8 }
9
10 @Synchronized
11 public int answerToLife() {
12 return 42;
13 }
14
15 @Synchronized("readLock")
16 public void foo() {
17 System.out.println("bar");
18 }
19 }
20
21 // 不使用注解
22 public class Synchronized {
23 private static final Object $LOCK = new Object[0];
24 private final Object $lock = new Object[0];
25 private final Object readLock = new Object();
26
27 public static void hello() {
28 synchronized($LOCK) {
29 System.out.println("world");
30 }
31 }
32
33 public int answerToLife() {
34 synchronized($lock) {
35 return 42;
36 }
37 }
38
39 public void foo() {
40 synchronized(readLock) {
41 System.out.println("bar");
42 }
43 }
44 }
SpringBoot - Lombok使用详解5(@log、@Buinder、@SneakyThrows、@Synchronized)的更多相关文章
- Lombok 使用详解,简化Java编程
前言 在 Java 应用程序中存在许多重复相似的.生成之后几乎不对其做更改的代码,但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求 比如,在 Java 应用程序开发中,我们几乎要为所有 ...
- Spring全家桶——SpringBoot之AOP详解
Spring全家桶--SpringBoot之AOP详解 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方 ...
- Springboot mini - Solon详解(六)- Solon的校验框架使用、定制与扩展
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Lombok使用详解(转)
本文转自https://blog.csdn.net/u010695794/article/details/70441432 2017年04月22日 15:17:00 阅读数:10394 Lombok使 ...
- SpringBoot之DispatcherServlet详解及源码解析
在使用SpringBoot之后,我们表面上已经无法直接看到DispatcherServlet的使用了.本篇文章,带大家从最初DispatcherServlet的使用开始到SpringBoot源码中Di ...
- SpringBoot Profile使用详解及配置源码解析
在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...
- Springboot mini - Solon详解(四)- Solon的事务传播机制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(二)- Solon的核心
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Springboot mini - Solon详解(三)- Solon的web开发
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
随机推荐
- csp-s2020 T2 动物园
题目简述: 共有n个动物,m条要求,每条要求描述了第x位上是1的话,必须购买y饲料,动物园里已有的动物必须的饲料已经购买了,问题是:在不要求增加购买饲料的基础上,还能放进去多少种动物?共有k个二进制, ...
- 安装最新版cmake
pip install cmake --upgradewhich cmakeln -s $(which cmake) /usr/local/bin/cmake
- WEB的安全性测试要素【转】
原文链接:http://www.cnblogs.com/zgqys1980/archive/2009/05/13/1455710.html WEB的安全性测试要素 1.SQL Injection(SQ ...
- STP协议-基础
生成树协议 一 .技术背景一个缺乏冗余性设计的网络:任何一个网络节点出现故障,会造成单链路故障.单设备故障,使整个网络瘫痪. 引入冗余性的同时也引入了二层环路:网络的冗余性增强了,但是却出现了二层环路 ...
- tiktok运营工具
1.自信点!这就是TikTok最全运营工具合集! - 知乎 (zhihu.com) 2.骄傲的和大家说!这就是TikTok最全运营工具合集! - 知乎 (zhihu.com) 3.如何批量去水印下载抖 ...
- mysql8 更改root密码(windows)
1.停止服务 net stop mysql; 2.控制台输入 mysqld --console --shared-memory --skip-grant-tables 3.重新打开一个窗口,进入bin ...
- JDBC之Driver和DriverMananger
JDBC之Driver和DriverMananger 目录 JDBC之Driver和DriverMananger Java和MySQL的关系 JDBC 演变过程 驱动加载入内存的过程 Oracle加载 ...
- 记录坑:Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定
问题:用定时器 setInterval()做个滚动通知的动画,浏览器最小化时,定时器 setInterval()失效了,导致滚动条重叠了 可能原因: js代码不稳定 Chrome谷歌浏览器最小化和页面 ...
- Python3 文件处理相关脚本
对文件相关处理是脚本中最常见的,下面列举几种实用的案例: 批量删除: (1)删除指定目录,指定后缀文件 例:删除目录J:/start下的 .log与.tmp结尾文件 def del_files(pat ...
- SAP 登入增强EXIT_SAPLSUSF_001
启用方式 SUSR0001->执行->激活