
Java
文章平均质量分 60
陈钰琪
笑看烟雨红尘
一念善,万水千山;一念恶,沧海桑田
展开
-
lombok 基础注解之 @Builder.ObtainVia
最全的 lombok 注解详情(随着版本不定时更新),lombok 基础注解之 @Builder一、注解介绍表示变量从什么地方获取值,只有当 toBuilder = true 时才生效二、属性介绍field:表示字段赋值时从某个字段上取值,对应的字段必须存在method:表示字段赋值时从某个方法上取值,对应的方法必须存在isStatic:表示 method 是否静态三、实战演练@Builder(toBuilder = true)public class 吴宣仪 { private S原创 2022-01-18 11:04:14 · 2955 阅读 · 0 评论 -
源码分析设计模式之代理模式(四、动态代理模式之 CGLIB 动态代理)
一、CGLIB 动态代理静态代理和 JDK 动态代理模式有个相同的特点就是都是依靠接口实现的,然而并不是所有的类都有接口的,这个时候就用不了 JDK 动态代理了,CGLIB 动态代理就可以闪亮登场了CGLIB 动态大力采用了非常底层的字节码技术,其原理是通过字节码技术在内存中为一个类创建子类,并在子类中采用方法拦截的方式拦截所有父类方法的调用,顺势织入横切逻辑,实现方法增强二、CGLIB 动态代理实现步骤查找 A 类上的所有非 final 的 public 类型的方法定义将这些方法的定义转换成字原创 2021-12-27 16:05:35 · 249 阅读 · 0 评论 -
lombok 实验性注解之 @StandardException
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍定义异常类,它会最多生成四个构造函数:无参、消息、异常、消息 + 异常,当你手写其中的构造函数后注解将不会重复生成二、属性介绍access:定义构造函数的访问修饰符共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONEMODULE 是 Java 9 的新特性,NONE 表示不生成 getter 方法,即停用注解功能三、实战演练@StandardException(access = Ac原创 2021-12-06 13:42:28 · 715 阅读 · 2 评论 -
lombok 实验性注解之 @SuperBuilder
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍@Builder 并不支持对基类成员属性的构造,而 @SuperBuilder 就是为了解决这个问题而产生的,算是 @Builder 的升级版二、属性介绍builderMethodName:创建内部静态类的方法名,默认值为 builderbuildMethodName:创建实体类的方法名,默认值为 buildtoBuilder:设置为 true 可以对这个对象进行拷贝生成新的对象,可以再修改,默认为 falsesetterPre原创 2021-11-27 12:00:00 · 12403 阅读 · 0 评论 -
lombok 实验性注解之 @UtilityClass
作用于类,将类标记为 final,并且类、内部类中的方法、字段都标记为 static。原创 2021-11-26 12:00:00 · 4876 阅读 · 0 评论 -
lombok 实验性注解之 @Tolerate
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍实现对冲突的兼容,官方解释:使任何方法或者构造函数让 lombok 假装它不存在,作用于方法上,没什么大用,可以配合 @Builder 使用二、使用场景使用 Lombok 能够减少程序员的重复工作提高工作效率,而 Lombok 的注解基本是基于标准的(如,标准的 Builder 模式),而实际开发的时候有时候为了实现某些能力会对标准实现做一些变形,而这个时候 Lombok 的标准实现就会无法满足需求使用 @Builder 对一个 DT原创 2021-11-25 12:00:00 · 4281 阅读 · 0 评论 -
lombok 实验性注解之 @FieldNameConstants
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,生成一个包含所有成员变量的内部类或者内部枚举,内部类中每个字段值即为字段名,并且内部类字段值不可变二、属性介绍(非必选)value:设置内部类或者枚举的访问控制符,默认为 public共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONEMODULE 是 Java 9 的新特性,NONE 表示不生成 setter 方法,即停用注解功能asEnum:是否为枚举类型,默认 false原创 2021-11-24 12:00:00 · 3424 阅读 · 0 评论 -
lombok 实验性注解之 @NonFinal
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类、变量,表示变量不加 final二、实战演练public class 祝绪丹 { @NonFinal String age; @NonFinal final String name = "祝绪丹"; // 必须初始化}三、温馨提示@NonFinal 主要配合 @FieldDefaults 使用,两者 @NonFinal 优先。如果手写访问修饰符,则访问修饰符优先......原创 2021-11-23 12:00:00 · 748 阅读 · 0 评论 -
lombok 实验性注解之 @Helper
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于方法内部类,使内部类中的方法暴露在外面可以被直接调用二、实战演练public class 迪丽热巴 { int someMethod(int arg1) { int localVar = 5; @Helper class Helpers { int helperMethod(int arg) { return arg + localVar; } } return helperMeth原创 2021-11-22 12:00:00 · 676 阅读 · 2 评论 -
lombok 实验性注解之 @FieldDefaults
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,定义变量的访问修饰符以及是否加 final二、属性介绍(两者必须有其一)level:指定变量的访问修饰符且不能为 NONE,默认值:NONE共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONEmakeFinal:是否加 final,默认 false,如果为 true 则所有的实例变量必须初始化三、实战演练@FieldDefaults(level = AccessLevel.原创 2021-11-19 12:00:00 · 2661 阅读 · 0 评论 -
lombok 实验性注解之 @ExtensionMethod
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,向类中添加方法,无需创建新的子类,变量与方法参数、返回值类型必须一样(即使是基础类型与包装类也不行)二、属性介绍(非必选)value:指定添加哪个类的方法,类名.classsuppressBaseMethods:如果为 false,基础类型不能调用方法,默认为 true如果 suppressBaseMethods = false1、变量与方法参数、返回值的类型不能为基础类型2、自定义方法不可与引用对象的方法重名(无法原创 2021-11-18 12:00:00 · 1298 阅读 · 0 评论 -
lombok 实验性注解之 @Delegate
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于容器变量,为该变量生成一堆常用的方法,这些方法都是容器中的方法二、属性介绍(非必选)types:指定代理方法的类、值为 类名.classexcludes:排除指定类,和 types 相反三、实战演练public class 李沁 { @Delegate private List<String> list = new ArrayList<String>(); public static v原创 2021-11-17 09:16:29 · 4869 阅读 · 3 评论 -
lombok 实验性注解之 @Accessors
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍类似于 @Builder 支持链式调用,需要配合 @Setter、@Getter 等注解使用,作用于类、变量二、属性介绍fluent:设置为 true 时,chain 默认为 true,setter / getter 方法名即为字段名,默认 falsechain:设置为 true 时,可以链式调用,即 setter 方法返回 this。默认 falseprefix:指定前缀,生成 getter / setter 方法会去掉指定的前原创 2021-11-15 10:48:59 · 562 阅读 · 0 评论 -
lombok 外部注解之日志注解
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,生成对应的 log 对象,用于记录日志,共有七个注解:@CommonsLog:org.apache.commons.logging.Log@Log:java.util.logging.Logger@JBossLog:org.jboss.logging.Logger@Log4j:org.apache.log4j.Logger@Log4j2:org.apache.logging.log4j.Logger@Slf4j:org原创 2021-11-12 16:36:19 · 1774 阅读 · 0 评论 -
lombok 基础注解之 @With
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,生成多个 with + 变量名的方法(个数为所有成员变量,不包含 @NonNull),作用于变量,生成 with + 变量名的方法返回当前对象,需要提供全参(不包含静态变量)构造方法二、属性介绍value:设置 with 方法的访问修饰符共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONEMODULE 是 Java 9 的新特性,NONE 表示不生成 with 方法,即停用注解原创 2021-11-12 11:39:37 · 2853 阅读 · 0 评论 -
lombok 基础注解之 @Value
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,使所有的成员变量都是 final 的,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @RequiredArgsConstructor二、属性介绍staticConstructor:使生成的构造方法私有化并且生成一个返回类型为当前对象的无参静态方法,方法名为 staticConstructor 值三、实战演练@Value(staticConstructor = "newIn原创 2021-11-06 12:00:00 · 2816 阅读 · 0 评论 -
lombok 基础注解之 @val
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类、变量,主要用于声明变量的类型,注解将从初始化程序表达式中推断类型,生成的变量是 final 不可以变二、实战演练@valpublic class 杨幂 { public static void main(String[] args) { val name = "杨幂"; System.out.println(name); }}编译后@valpublic class 杨幂 { public stat原创 2021-11-05 13:34:24 · 791 阅读 · 0 评论 -
lombok 基础注解之 @ToString
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,覆盖默认的 toString() 方法,输出格式:ClassName(fieldName=fieleValue, fieldName1=fieleValue)二、属性介绍includeFieldNames:在打印时是否包括字段的名称,默认为 trueexclude:通过该属性可以排除某些字段,默认为空of:过该属性可以限定显示某些字段,默认打印非静态字段当 of 属性和 exclude 属性同时出现时,of 属性优先原创 2021-11-04 09:45:34 · 7696 阅读 · 0 评论 -
lombok 基础注解之 @Synchronized
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于方法,可以替换 synchronize 关键字或 lock 锁二、属性介绍value:指定锁对象,当锁对象不存在时,则编译不通过,默认为 “”三、实战演练public class 唐嫣 { public final String NAME = "唐嫣"; @Synchronized(value = "NAME") // 对应字段 NAME public void name() { System.out.pri原创 2021-11-03 10:43:07 · 1859 阅读 · 0 评论 -
lombok 基础注解之 @SneakyThrows
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于方法,对异常进行捕捉并抛出二、属性介绍value:指定异常类型,默认为 Throwable.class三、实战演练/** * value:指定异常类型,默认为 Throwable.class */public class 刘诗诗 { @SneakyThrows(Exception.class) private static void shishi() { throw new Exception("抛出异常")原创 2021-11-02 10:08:21 · 1027 阅读 · 2 评论 -
lombok 基础注解之 @Singular
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于集合字段,需要配合 @Builder 使用使用 @Singular 注解一个集合字段(如果没有指定 value 属性值,那么集合字段名需要是复数形式),会生成两个添加元素方法一个向集合添加单个元素(方法名:集合字段名的单数形式 / value 属性值)一个将另一个集合的所有元素添加到集合中(方法名:集合字段名)还生成了 clear 方法(方法名:clear + 集合字段名,驼峰命名)。 这些 singular 构建器相对而言原创 2021-11-01 13:53:01 · 5699 阅读 · 0 评论 -
lombok 基础注解之 @Setter
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,生成该类所有的实例变量的 setter 方法。作用于变量,生成该变量的 setter 方法二、属性介绍value:设置 setter 方法访问控制符,默认为 public共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONEMODULE 是 Java 9 的新特性,NONE 表示不生成 setter 方法,即停用注解功能onMethod:列出的所有注解都放在生成的方法上JDK原创 2021-10-30 10:23:59 · 5235 阅读 · 0 评论 -
lombok 基础注解之 @RequiredArgsConstructor
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍作用于类,用于生成包含 final 和 @NonNull 注解的成员变量的构造方法二、属性介绍staticName:使生成的构造方法是私有的并且生成一个参数为 final 变量和 @NonNull 注解变量,返回类型为当前对象的静态方法,方法名为 staticName 值access:设置构造方法的访问修饰符,如果设置了 staticName,那么将设置静态工厂方法的访问修饰符的静态工厂方法共有 PUBLIC、MODULE、PR原创 2021-10-29 10:27:41 · 24319 阅读 · 3 评论 -
Java 里的四个访问控制符
Java 里 private,protected,private,default 的区别public :具有最大的访问权限,可以访问任何一个在 classpath 下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。defaul...原创 2019-12-10 23:17:22 · 268 阅读 · 0 评论 -
lombok 基础注解之 @NonNull
最全的 lombok 注解详情(随着版本不定时更新)一、实战演示@Setter@Getterpublic class 马凡舒 { @NonNull private String name;}编译后public class 马凡舒 { @NonNull private String name; public void setName(@NonNull String name) { if (name == null) throw new NullPo原创 2021-10-28 10:58:24 · 3451 阅读 · 0 评论 -
lombok 基础注解之 @NoArgsConstructor
最全的 lombok 注解详情(随着版本不定时更新)一、属性介绍staticName:生成的构造方法是私有的,并且生成一个返回实体类且方法名为 staticName 值的无参数的静态工厂方法onConstructor:列出的所有注解都放在生成的构造方法上JDK 7 之前的写法是 onConstructor = @__({@Deprecated}),而 JDK 8 之后的写法是 onConstructor_ = {@Deprecated}access:设置构造方法的访问修饰符,如果设置了 stat原创 2021-10-27 10:09:30 · 28272 阅读 · 3 评论 -
lombok 基础注解之 @Getter
最全的 lombok 注解详情(随着版本不定时更新)一、属性介绍value:默认为 public。共有 PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONEMODULE 是 Java 9 的新特性,NONE 表示不生成 getter 方法,即停用注解功能lazy:默认为 false。如果设置为 true,参数必须是 finalonMethod:列出的所有注解都放在生成的方法上JDK 7 之前的写法是 onMethod = @__({@Deprecated})原创 2021-10-26 09:44:32 · 7029 阅读 · 0 评论 -
lombok 基础注解之 @EqualsAndHashCode
最全的 lombok 注解详情(随着版本不定时更新)一、属性介绍exclude:通过该属性可以排除某些字段of:通过该属性可以限定计算某些字段当 of 属性和 exclude 属性同时出现时,of 属性优先。在不久的将来两者将会被加上 @Deprecated(不建议使用,有更好的替代)callSuper:是否需要调用父类的方法,默认为 falsedoNotUseGetters:是否调用 getter 方法获取属性值,false 表示调用,默认 falsecacheStrategy:是否缓存原创 2021-10-25 09:19:33 · 6920 阅读 · 2 评论 -
lombok 基础注解之 @Data
最全的 lombok 注解详情(随着版本不定时更新)一、注解集合此注解包含以下注解:@ToString、@EqualsAndHashCode、@Getter、@Setter、@RequiredArgsConstructor二、属性介绍staticConstructor:它会把生成的构造方法变成私有的,默认值:""并且生成一个返回实体类且方法名为 staticConstructor 值的静态工厂方法这个静态工厂方法参数会包含该类中含 @NonNull 注解的变量以及是 final 且不是 sta原创 2021-10-24 12:06:54 · 11795 阅读 · 0 评论 -
lombok 基础注解之 @CustomLog
最全的 lombok 注解详情(随着版本不定时更新)一、注解介绍自定义日志类,生成 log 对象,个人感觉没什么用二、属性介绍topic:用于设置 getLogger(String name) 方法的参数,值为类的全限定名。默认值为 “”,方法默认参数为当前类的全限定名三、实战演练@CustomLogpublic class 陈钰琪 { public static void main(String[] args) { log.info("陈钰琪"); }}class Yuke原创 2021-10-24 12:03:29 · 6071 阅读 · 0 评论 -
lombok 基础注解之 @Cleanup
最全的 lombok 注解详情(随着版本不定时更新)一、属性介绍value:指定的方法(这个方法需要在注解对象中存在)关闭资源,默认使用 close 方法如果指定的方法带异常,则需要捕获或者抛出该异常(可以比该异常大)二、实战演示编译前public class 景甜 { public static void main(String[] args) { @Cleanup Scanner scanner = new Scanner(System.in); try { @Clean原创 2021-10-24 11:59:37 · 2120 阅读 · 0 评论 -
lombok 基础注解之 @Builder
最全的 lombok 注解详情(随着版本不定时更新)@Builder 注解为类生成相对略微复杂的构建器 API。可以以下面形式调用代码,初始化实例对象生成的对象是不可以变的,如果需要在原来的基础上修改可以加 set 方法 final 字段可以不需要初始化,可以在创建对象的时候进行赋值。它会生成一个全参的构造函数一、属性介绍@Builder.Default:非 final 的字段可以有默认值builderMethodName:指定创建内部静态类的方法名,默认值为 builderbuild原创 2021-10-24 11:56:25 · 92011 阅读 · 12 评论 -
lombok 基础注解之 @AllArgsConstructor
最全的 lombok 注解详情(随着版本不定时更新)一、属性介绍staticName:生成的构造函数是私有的,并且生成一个返回实体类且方法名为 staticName 值的参数为所有实例变量的静态工厂方法onConstructor:列出的所有注解都放在生成的构造函数上JDK 7 之前的写法 onConstructor = @__({@AnnotationsGoHere}),JDK 8 之后的写法 onConstructor_ = {@AnnotationsGohere}access:设置构造函数的原创 2021-10-24 11:49:08 · 36073 阅读 · 0 评论 -
源码分析设计模式之代理模式(三、动态代理模式之 JDK 动态代理)
一、动态代理动态代理是指在运行时,动态生成代理类。即,代理类的字节码将在运行时生成并载入当前的 ClassLoader动态代理的主要特点就是能够在程序运行时 JVM 才为被代理对象生成代理对象动态代理和静态代理角色一样动态代理分为两大类:基于接口的 JDK 动态代理和基于类的 CGLIB 动态代理通常说的动态代理指的是 JDK 动态代理与静态代理类想比,动态类有诸多好处。首先,不需要为真是主题写一个形式上完全一样的封装类,假如主题接口中的方法很多,为每一个接口写一个代理方法也是非常烦人的事,原创 2021-06-29 17:29:59 · 141 阅读 · 0 评论 -
源码分析设计模式之代理模式(二、静态代理模式)
一、静态代理模式静态代理是代理类在编译期间就创建好了,不是编译器生成的代理类,而是手动创建的类。在编译时就已经将接口,被代理类,代理类等确定下来。在软件设计中所指的代理一般是指静态代理,也就是在代码中显式指定的代理二、实现静态代理四步骤定义业务接口被代理类实现业务接口定义代理类并实现业务接口最后便可通过客户端进行调用三、实现代码/** * 抽象角色:出租房 */interface Rent { void rent();}/** * 真实角色:房东 */class原创 2021-06-13 17:46:05 · 132 阅读 · 0 评论 -
源码分析设计模式之原型模式
一、原型模式简介原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如:一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用原型模式实际上就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。在原创 2021-06-06 23:26:34 · 280 阅读 · 4 评论 -
源码分析设计模式之工厂模式(三、抽象工厂模式)
上篇文章讲到了对工厂方法模式进行变化后带来的缺陷,而为了解决工厂方法模式所带来的缺陷,从而引出了抽象工厂模式。在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性。一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个电器工厂,它可以生产电视机、电冰箱、空调等多种电器,而不是只生产某一种电器。为了更好地理解抽象工厂模式,先引入两个概念:产品等级:就好比一个抽象类是手机,其子类有苹果原创 2021-06-06 20:40:49 · 199 阅读 · 5 评论 -
源码分析设计模式之工厂模式(二、工厂方法模式)
上篇文章讲到了简单工厂模式众多缺陷,为了解决简单工厂模式带来的缺陷,从而引出了工厂方法模式二、工厂方法模式工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象简单理解就是: 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中角色组成抽象工厂角色:它是具体工厂继承的父类或者实现的接口具体工厂角色:它含有和具体原创 2021-05-30 22:41:28 · 180 阅读 · 10 评论 -
源码分析设计模式之工厂模式(一、简单工厂模式)
我们开发过程中经常听到工厂这个词,工厂顾名思义就是创建产品。根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建在实际工作中简单工厂用的是比较多的。工厂方法和抽象工厂是 GoF23 种设计模式中的一种,而常使用的简单工厂并不是一种设计模式,可以说是我们自己的一种俗称原创 2021-05-29 17:04:57 · 362 阅读 · 8 评论 -
@Deprecated 注解详情
一、@Deprecated 说明若类、方法、属性加上该注解之后,表示不再建议使用,调用时会出现删除线,但并不代表不能用,只是不推荐使用,因为有更好的替代二、使用场景 使用它存在风险,可能导致错误 可能在未来版本中不兼容 可能在未来版本中删除 一个更好和更高效的方案已经取代它三、@Deprecated 用法此注解可以用在类、方法、属性上。在给定此注解后,应该在注释中说明:废弃此方法后的代替方法是哪个、处理原逻辑代替方案是什么 本身不打算代替,而是直接清除的,则最好给出会清除此方法的具原创 2020-07-14 10:23:05 · 6086 阅读 · 0 评论