精品网站建设多少钱,织梦网站建设培训班,电商运营培训课程网站,镇江网站建设制作公司目录专栏导读一、从零了解JavaBean1、基本概念2、JavaBean的特征3、JavaBean的优点二、定义最简单的JavaBean三、思考一个问题#xff0c;为何属性是private#xff0c;然后用get/set方法#xff1f;四、下面系统的分析以下#xff0c;why?五、不和谐的声音#xff0c;禁…
目录专栏导读一、从零了解JavaBean1、基本概念2、JavaBean的特征3、JavaBean的优点二、定义最简单的JavaBean三、思考一个问题为何属性是private然后用get/set方法四、下面系统的分析以下why?五、不和谐的声音禁止使用Lombok六、总结专栏导读 作者简介哪吒CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家 专注Java硬核干货分享立志做到Java赛道全网Top N。 本文收录于Java基础教程系列进阶篇本专栏是针对大学生、初级Java工程师精心打造针对Java生态逐个击破不断学习打通Java技术栈。 订阅后可以阅读Java基础教程系列进阶篇中全部文章包含Java基础、Java高并发、Spring、MySQL等Java进阶技术栈。 还可以订阅其姐妹篇Java基础教程系列包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例理论结合实战实现Java的轻松学习。 哪吒多年工作总结Java学习路线总结搬砖工逆袭Java架构师。 面试福音10万字208道Java经典面试题总结(附答案) 大家好我是哪吒。
一、从零了解JavaBean
1、基本概念
JavaBean是一种用Java语言写成的可重用组件。为写成JavaBean类必须是具体的和公共的并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性set和get方法获取。众所周知属性名称符合这种模式其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
JavaBean可以看成是一个黑盒子即只需要知道其功能而不必管其内部结构的软件设备。黑盒子只介绍和定义其外部特征和与其他部分的接口如按钮、窗口、颜色、形状、句柄等。通过将系统看成使用黑盒子关联起来的通讯网络我们可以忽略黑盒子内部的系统细节从而有效地控制系统的整体性能。
2、JavaBean的特征 3、JavaBean的优点
构件对组装环境具有较强的适应能力。通过主对象对组装环境的感知协调内部对象作出反应改变接口状态以适应环境。在必要时可依靠外部驱动对象的引入进一步增强对环境的适应能力。实现从分析设计到实现的平滑过渡。领域分析和设计的基本原则将领域知识和计算机实现分离开来。将构件内部对象划分成实现用户功能的对象集和用于组装的对象集加以实现符合分析和设计原则。最大限度地利用成熟的技术。从构件的分析、设计和实现都可借助已有的比较成熟的面向对象技术。
二、定义最简单的JavaBean
1、最简单的JavaBean
package com.nezha.mongo.bean;public class User {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}
}
2、通过lombok简化get/set
package com.nezha.mongo.bean;import lombok.Data;Data
public class User {private Integer id;private String name;
}三、思考一个问题为何属性是private然后用get/set方法
普遍想法
大家都这么写我也这么写这是Java的封装特性你不知道隐藏属性不暴露过多细节更安全
四、下面系统的分析以下why?
1、采用get/set方法其实是Java的一个协议在1996年12月提出的java bean1.00-A通过统一的规范可以设置对象的值比如get、set方法。很多框架也是在此基础上开发的底层源码也都是通过get/set访问属性的。 2、很多时候可以通过get/set方法① 增加一些功能② 增加一些特定的修改比如打折③ 增加一些访问逻辑④ 还可以通过set方法触发一些事件。 3、如果你将一个属性定义为public了而且在50处调用了此时产品经理来了一个需求将此次的促销商品打五折难道你要去修改这50处的代码吗如果你用get/set封装了修改对应属性的set方法即可so easy~ 4、就像上面所说大家都这么写我也这么写但是对于大多数企业应用来说直接将属性写成public也是没毛病。 5、也可以理解为“风格统一的代码更好维护”。 6、假如我新接手一个项目要用到某个bean我也不知道都有什么属性一般的做法都是先new一个然后通过小数点联想出来如果没有get/set那真的很烦躁。 7、现在都是面向接口编程而Java接口中是不能定义普通的属性的但可以定义get/set方法。 进一步了解一下Java封装的概念。
封装是指一个对象对其他对象隐藏其部分状态和行为而仅向程序其他部分暴露有限的接口的能力。封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口授权外部仅能通过类提供的方式或者叫函数来访问内部信息或者数据。对于封装这个特性我们需要编程语言本身提供一定的语法机制来支持。这个语法机制就是访问权限控制。
为了解决get/set的代码臃肿问题lombok应运而生。简单无脑解决一切烦恼。
使用 Lombok 可以让代码更加简洁减少冗余的代码量。使用 Lombok 时可以使用注解来生成常用的代码如 getter、setter、equals、hashCode 和 toString 方法这些方法通常都是在 Java 类中需要手动编写的。 使用 Lombok 可以省去这些手动编写的步骤使代码更加简洁。此外使用 Lombok 还有一个好处是可以使用注解来生成构造函数和静态构造函数这些构造函数可以接受所有属性作为参数。这样就可以避免手动编写很多构造函数的情况。因此使用 Lombok 可以让代码更加简洁减少冗余的代码量提高代码的可读性和可维护性。
Lombok代替public因为public成员的可见性太大。将成员定义为public意味着任何地方都可以访问这个成员这可能会导致成员被意外地修改从而影响类的稳定性和正确性。而使用Lombok可以通过自动生成getter和setter方法来保护成员的可见性从而提高类的封装性和可维护性。此外使用Lombok还可以帮助开发人员减少编写重复的代码提升工作效率。
因此为了保护成员的可见性并提升代码的可维护性许多人宁可使用Lombok也不愿意将类的成员设为public。
五、不和谐的声音禁止使用Lombok
1、jdk版本问题
目前国内大多数Java项目采用的都是JDK1.8因为它够稳定功能也完全够用但是如果哪一天你的客户心血来潮就是想用JDK11甚至JDK17此时你会发现Lombok不好用了于是不得不将好几百个实体类通过idea生成get/set、equals、toString等方法很烦躁。
2、被迫营业
当你的客户获取到你的源代码之后他也想看看运行一下此时发现没安装Lombok报错了安装Lombok不了解这是什么还要去百度学习一下被迫营业很烦躁。
3、可读性差
Lombok隐藏了JavaBean的封装细节toString()不知道会打印什么AllArgsConstructor提供一个全量构造器 让外界在初始化时可以随意修改其属性极其不安全。如果属性过多这个全量构造器看起来很鸡肋参数的顺序我们也无法控制都是按照Lombok的心情来的
使用Lombok写代码的时候很爽但它
污染了你的代码玷污了Java语言的纯粹破坏了Java代码的完整性、可读性、安全性增加了代码的耦合度增加了代码的调试难度
这是一种弊大于利、得不偿失的操作。
六、总结
综上所述将成员变量定义为public是不可取的使用Lombok也不是一个明智的选择还是老老实实的通过IDE生成get/set方法吧。 Java学习路线总结搬砖工逆袭Java架构师
10万字208道Java经典面试题总结(附答案)
Java基础教程系列
Java基础教程系列进阶篇