本文不讨论对错,只讲骚操作。 有的方法看看就好,知道可以这么用,但是否应用到实际开发中,那就仁者见仁,智者见智了。 一万个读者就会有一万个哈姆雷特,希望这篇文章能够给您带来一些思考。...@Delegate @Delegate可以让你的类使用其他类的方法,而不需要自己写代码。...比如,你有一个类叫做A,它有一个方法叫做sayHello(),你想让另一个类B也能用这个方法,那就可以在B类中加上一个A类型的字段,并在这个字段上加上@Delegate注解,这样,B类就可以直接调用sayHello...void sayHello() { System.out.println("Hello"); } } // 一个类,委托了A类的方法 public class B { @Delegate...这两个方法可以和 @Builder 生成的其他方法一起链式调用,给你的类的所有字段赋值。
让我们一起看看Lombok怎样施展它的魔法以及一些使用示例。 Lombok如何运行的(How Lombok Works) Lombok充当注解处理器,在编译时将代码“添加”到你的类中。...没有问题,因为如果我们比如打错字或提到一个不存在的field时,Lombok会抛出一个编译异常。与Lombok在一起,我们是安全的。...Lombok为此提供了一个使用@Delegate注解的解决方案。我们来看一个例子。 想象一下,我们想引入一个新的概念ContactInformation。...; import lombok.NonNull; import lombok.Setter; import lombok.ToString; import lombok.experimental.Delegate...这些通常在运行时工作,而且包括一个超出本文讨论范围的自己的世界。
选出自己需要的一些组件生成项目即可,我这里选了如下几个: Web: Web项目 JPA: 数据库持久层采用Spring Data JPA,方便实用 Lombok: 可以通过注解大量减少Java中重复代码的书写...; import lombok.Setter; import lombok.experimental.Accessors; /** * 博客实体...Mockito.verify(blogRepository).save(Mockito.any()); } /** * 测试根据博客ID来修改该博客的名称失败时的情况....Mockito.verify(blogRepository, Mockito.never()).save(Mockito.any()); } } 注意:这里的 @RunWith 采用的是 Mocktio...Controller 层的单元测试 Controller 层测试的重点是测试接口是否能正常工作。可以用到 Spring Boot 中提供的 @WebMvcTest 注解来模拟 Web 层的单元测试。
今天给大家介绍一款能帮助我们简化这些代码的神器:Lombok!有了这个神器,你的 Java Bean 类的代码量至少可以省一半。 什么是Lombok?...总之,有了这个家伙,可以省掉很多代码的编写,大大减少了工作量和维护的难度。 如何使用Lombok? 1、安装插件和配置依赖 ?...如上图所示,Lombok支持所有主流的 IDE 开发工具及编译构建工具。 在 IDEA 中安装 Lombok 插件,这样在使用 Lombok 的时候就不会编译报错。 ?...@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger @Data @Builder @Singular @Delegate...config system Code inspections Refactoring actions (lombok and delombok) 也可以去 Lombok 对应的包里面看所有支持的注解。
摘要 记录下使用 lombok遇到的反序列问题,一开始在 lombok1.16.18中并没有发现,然后应用中没有指定lombok全局版本,引入的其他二方包将lombok版本提升到了 1.16.20,然后报错...com.fs.jackson.Address` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate...chain = true) @Builder public class Address { private Long id; private String address; } 分析 分析lombok...这显然是lombok升级过程中的一个不兼容的改造。 因为我们都没有定义无参构造函数,所以会找已有的构造函数,然后匹配getter/setter函数。...解决 1.maven中指定lombok固定版本,使用1.16.18版本,代码层面不需要做更改 2.类中添加无参构造器 建议 需要序列化的类,比如与前端交互,rpc调用,都加上无参构造器,兼容性比较好 参考
这些入门依赖项已与所需的依赖项捆绑在一起。...5.使用 Lombok 作为一名 Java 开发人员,我们可能听说过 Lombok 项目。 Lombok 是一个 Java 库,可用于减少代码并允许我们使用其注释编写干净的代码。...6.将构造函数注入与 Lombok 一起使用 当我们谈论依赖注入时,有两种类型。 一种是“构造函数注入”,另一种是“setter 注入”。...不返回空值,可以返回空集合。 如果我们使用对象作为要存储在基于哈希的集合中的数据,则应重写 equals() 和 hashCode() 方法。请查看这篇文章“HashMap 内部是如何工作的”。...通常,我会遵循, 类 — 帕斯卡命名 方法和变量 — 驼峰命名 常量 — 大蛇式命名 数据库相关字段 — 短横线命名 这只是一个例子,它可能与我们在公司遵循的标准不同。
那么,我们为了测试方便需要添加 @ToString() 注解,就会输出 UserBean(id=1001, userName=polly) 换一个思路,你可能想,我不添加ToString注解,我把他转成...ofcom.pollyduan.builder.UserBean(no Creators, like default construct, exist): cannot deserialize from Object value (no delegate...lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor...; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor...它有两种工作模式,fluent和chain,举例说明: package com.pollyduan.accessors; import lombok.Data; import lombok.experimental.Accessors
那么,我们为了测试方便需要添加 @ToString() 注解,就会输出 UserBean(id=1001, userName=polly) 换一个思路,你可能想,我不添加ToString注解,我把他转成...com.pollyduan.builder.UserBean (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate...lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor...; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor...它有两种工作模式,fluent和chain,举例说明: package com.pollyduan.accessors; import lombok.Data; import lombok.experimental.Accessors
解决这种代码的重构方案叫隐藏委托关系(Hide Delegate),即把这种调用封装: class Book { ......3 迪米特法则 每个单元对其它单元只拥有有限知识,而且这些单元是与当前单元有紧密联系 每个单元只能与其朋友交谈,不与陌生人交谈 只与自己最直接的朋友交谈 该原则需要思考:哪些是直接朋友、陌生人。...软件行业有一个编程指导原则,叫迪米特法则,可以作为日常工作的指导,规避这种坏味道的出现。 基本类型偏执就是用各种基本类型作为模型到处传递,这种情况下通常是缺少了一个模型。...链式调用不一定都是火车残骸,比如: builder模式,每次调用返回的都是自身,不牵涉到其他对象,不违反迪米特法则 java stream操作,就是声明性操作。...JavaBean,用MyBatis Genarater或Lombok生成都会有Setter方法,这样DB查询或接受参数时,数据自动映射到这个对象。如果不用setter,怎么赋值?
官网:https://projectlombok.org/ Lombok 是一个 Java 库,使用 Lombok 可以通过简单的注解帮助我们消除 Java 的样板代码,使代码更加简洁清晰。...Lombok 引入 1、POM 中引入依赖 使用 Lombok 注解需要依赖它的库。...的插件,方便本地 IDE 的研发工作。...Lombok 使用注意 不建议直接使用 @Data 这种大而全的方式覆盖太多的简化场景。 toString 场景不建议使用 Lombok 的,建议使用系统自定义 ToString 里的方法。...欢迎关注我,和蜗牛一起成长,我们一起牛~下期见!
因为每次发新版本就会有一个问题,也一直影响着大家升级,那就是粉丝普遍反馈的 Lombok 等插件不兼容的问题,没办法,我们也用了这个插件,轻量使用而已。...还是说不兼容 Lombok,到底是什么鬼?...image.png 下面是评论: image.png 栈长来解读下他们的留言: Wojciech Musiał: “我不得不说,用户也在哭诉……我们无法使用该工具正常工作,为此,我们付出了代价。...还有很多评论的呼声是要官方原生支持 Lombok,IntelliJ 开发者被讨伐,有兴趣可以进那个链接看下,不过这个问题最终还是解决了: ? 既然如此,为什么还是提示说不兼容 Lombok 呢?...感受了一下,使用了 Lombok 插件的代码暂时没有遇到问题,不过升级还是需要谨慎,毕竟我只是轻度使用用户。 希望这个版本是彻底解决了新版不兼容 Lombok 插件的问题,后面我们一起拭目以待吧。
今天到工作室比较晚,在电脑前吃着早饭,看到提示IDEA提示升级,寻思已经有好久没有升过级了。一样等着,就升级下吧。 升级完毕重启之后,突然发现好多错误,原来的应用也没法启动了。...仔细一看报错信息,是由于Lombok相关的注解似乎都没有生效。...$Proxy26 Lombok supports: sun/apple javac 1.6, ECJ 搜索一番,是由于IDEA版本导致的Lombok失效,不过这个问题后来解决了。...用户,往往不写版本号,因为2.x开始,就Spring Boot就把lombok的版本一起纳入了。...Compiler中增加参数配置:-Djps.track.ap.dependencies=false 如果你还有其他疑问,关注下方公众号,回复”加群“,加入我们的Spring技术交流群,参与交流与讨论,一起学习与进步
这些入门依赖项已与所需的依赖项捆绑在一起。...5.使用 Lombok 作为一名 Java 开发人员,我们可能听说过 Lombok 项目。 Lombok 是一个 Java 库,可用于减少代码并允许我们使用其注释编写干净的代码。...6.将构造函数注入与 Lombok 一起使用 当我们谈论依赖注入时,有两种类型。 一种是“构造函数注入”,另一种是“setter 注入”。...不返回空值,可以返回空集合。 如果我们使用对象作为要存储在基于哈希的集合中的数据,则应重写 equals() 和 hashCode() 方法。 12.使用分页 这将提高应用程序的性能。...通常我会遵循如下方式, 类 — 帕斯卡命名 方法和变量 — 驼峰命名 常量 — 大蛇式命名 数据库相关字段 — 短横线命名 这只是一个例子,它可能与我们在公司遵循的标准不同。
注意:如果不按照插件idea中就无法编译使用lombok注解的代码。...lombok工作原理 java程序的解析分为:运行时解析 和 编译时解析。 通常我们通过反射获取类、方法、注解和成员变量就是运行时解析。但是这种方式效率其实不高,要在程序运行起来才能解析。...不过在JDK 1.8以后,第一种处理器被淘汰了,取而代之的是第二种处理器,我们一起看看它的处理流程: ?...即使lombok是一个神器,但是却有很多人不建议使用,这又是为什么呢? ![](data:;base64,<?...3.升级JDK对功能有影响 有人把JDK从Java 8升级到Java 11时,我发现Lombok不能正常工作了。
怎么做的 6.GCD队列,同步异步,不耗时任务多线程处理,耗时任务多线程处理。...按时间细数一下面试的情况,面试的时候我们领导会跟我一起,我问面试者答,领导听(领导也懂技术),面完技术之后领导会问其他的。...不过后面没有来入职 这次面试经历对我真的非常有用,能与这些人交流,了解和学习不同人的沟通能力,也从这些人身上获取iOS行业的真实信息,知己知彼。受益匪浅,特此也来和大家分享一下。...怎么做的 6.GCD队列,同步异步,不耗时任务多线程处理,耗时任务多线程处理。...第四题问block,delegate的运用过程,要求面试者理理思想,讲一下block,delegate从创建到使用的过程和保持安全的办法,我会跟着他们的思维不会让面试者漏下每一步。
x-www-form-urlencoded") Long saveOrUpdateUser(@QueryMap Map param); 虽然使用上面两种方案可以解决,但存在不优雅的地方...,比如参数太多,用map语意不直观。...dependency> org.projectlombok lombok...) { this.delegate = delegate; List list = Arrays.asList(new MultipartFormContentProcessor...(delegate), new UrlencodedFormContentProcessor()); this.processors = new HashMap(list.size(),
@Delegate 注释的属性,会把这个属性对象的公有非静态方法合到当前类 代理模式,把字段的方法代理给类,默认代理所有方法。...注意:公共 非静态方法 public class Demo extends Parent { private final int finalVal = 10; @Delegate...UtilityClass 工具类 会把所有字段方法static掉,没啥用 @Wither 生成withXXX方法,返回类实例 没啥用,因为还有bug ---- @Builder和@NoArgsConstructor一起使用冲突问题...我们发现手动书写出来的空构造,默认值是不生效的。这点需要特别注意。 这个就不说是Lombok的bug了,因为既然你都使用Lombok了,为何还自己写空构造呢?不是作死吗?...从上面的Lombok执行的流程图中可以看出,在Javac 解析成AST抽象语法树之后, Lombok 根据自己编写的注解处理器,动态地修改 AST,增加新的节点(即Lombok自定义注解所需要生成的代码
--lombok,可以简化get,set,toString的插件--> org.projectlombok...lombok true ...注意,不要使用@Autowired 注入BaseMapper,否则会报空指针异常,因为可能与POI冲突,因而你可以new 一个,或者使用构造方法进行注入,这里采用构造方法进行注入。...HttpServletResponse response){ try { //设置响应头,指定输出格式 //attachment指定独立文件下载 不指定则回浏览器中直接打开...Excel文档:使用PostMan工具测试 选择post请求—选择form-data----key填file,value选择文件,让后send,可以查看控制台输出 六、若是遇到什么问题,可以一起交流学习
领取专属 10元无门槛券
手把手带您无忧上云