ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

B站尚硅谷Java微服务+分布式+全栈项目【尚医通】观后扩展(P4-P5)

2021-05-01 21:33:35  阅读:368  来源: 互联网

标签:P4 尚医通 抛出 观后 baos 注解 lombok 父类 Data


文章目录

创建了一个java的springboot项目,设置版本为2.2.1,没有说为什么

如果配置其他版本,能正确运行吗?需要做出哪些改动?

在这里插入图片描述首先查询官网,发现springcloud最新版本对于springboot的支持是2.4.3

在这里插入图片描述然后发现springboot没有2.4.3的稳定版,那就按顺序选更早的GA版本(正式发布版本),2.3.10试试

在这里插入图片描述
成功了!
总结:修改版本需要查看官网

lombok插件能干什么

lombok这个插件有什么用途呢?还有哪些神奇的功能值得学习?

  • 首先,都是英文的,用英文工具大概翻译一下
    在这里插入图片描述
    简单的说,lombak注解出现的原因是解决常用代码中,大量重复使用固定句式,代码不够简洁的问题
lombok对于@Data介绍,有一句很让我注意:

在这里插入图片描述
另外还提供了这张图:

就是说@Data除了实现了Getter,Setter之外,还重写了equals和hashcode
出于好奇,做了个测试:
在这里插入图片描述
可以看到真的重写过
OK,@Data大概是有gettersetter+hashCode+equals+toString

其他注解也看一下

  • @Getter @Setter

    添加getter,setter方法
    特殊:boolean类型会变成isXx,比如 enable,getter会变成isEnable

说实话,对boolean的支持并不是很满意,boolean类型是我更关注的问题,其实Java Springboot中最佳支持应该是getXx,使用is有时候会造成奇怪的问题,比如json解析问题。
在这里插入图片描述
在这里插入图片描述
明显吞了一个is,json解析明显会出错。这种注解,我个人在项目上还是不喜欢用(至少不会整个Bean一起用),出问题不太好查找。其实常见的方式就是,整个项目的JavaBean都不要用boolean,考虑用YN代替以解决代码适配问题。这个问题本身,lombok没什么问题。

@Getter @Setter private boolean employed = true;

这种单注解还是可以用的,不过既然现在getter,setter有自动生成功能,为什么要这么用呢,嗯。。。。好像直接用自动生成还快一点

@NonNull 非空,如果空了立刻抛空指针

这个注解会考虑使用,缺点是侵入性太强,如果是已存在的项目,大概率不会在旧类上补
在这里插入图片描述

@TOSTRING 相当于toString

这个注解挺不错的,还可以继承父类,非常赞,写toString非常麻烦,直接输出的话,调试速度上可以有所增强,用它!

@EqualsAndHashCode(callSuper=true,exclude={“address”,“city”,“state”,“zip”}) hashCode+equals

事实上很多人都说继承这个是坑,我想问一句,人家写的文档你读了吗?
在这里插入图片描述

  1. 子类包含父类需要加callSuper=true
    1.1 加callSuper=true
    在这里插入图片描述
    1.2不加callSuper=true
    在这里插入图片描述

  2. 只继承Object的类不能加这个参数,因为继承Object实际上比较的是对象地址,并不能达到重写equals的目的,因此给你编译错误的提示
    在这里插入图片描述
    3.补充,没有加callSuper的时候,这个注解还非常人性化的给你一个警告
    在这里插入图片描述
    如果对一个空对象做getter操作,往往是是通过IO取了数据之后,一般这种情况,如果忘记写空检查,本身就会抛异常,如果作为代码规范,是可行的,起提示作用

对于setter来说,是有用的m存数据的时候,忘记对某些字段处理m会抛异常的确能起到提示的作用,减少bug

@Data @ToString, @EqualsAndHashCode, @Getter, 加 @Setter

额外功能:

  • 构造器会根据属性的情况进行生成,比如,如果有字段是使用final或者@NonNull修饰的,自动加相应字段的非空构造(防止忘记设置非空,final字段)

  • 可以补充staticConstructor="of"属性,自动使用单例模式,工厂模式,调用时使用A.of()

  • 写了bean,用了@Data注解

  • 写了properties,配置了mysql,lombok日志

  • 写了mapper,i使用了@MapperScan标注mapper包名

@CLEANUP 相当于try…finally块+close()

养成习惯后,就不会因为没有进行close操作而造成内存泄漏。事实上在项目中还真的发现过以前的程序员没有写close(),发现的方式是,刚好要对那个文件进行修改,可是开着idea居然一直被占用,没有释放。
示例:

@Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(new byte[] {'Y','e','s'});
System.out.println(baos.toString());

和下面是等价的:

 ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            baos.write(new byte[]{'Y', 'e', 's'});
            System.out.println(baos.toString());
        } finally {
            baos.close();
        }
@Synchronized 加专门的对象对方法加锁

对于实例方法,synchronized关键字将锁定当前对象(this),对于静态方法,则锁定类对象。这意味着开发人员控制范围之外的代码有可能锁定同一对象,从而导致死锁。
通常建议对单独的对象显式锁定,该对象专门用于此目的,而不是以允许主动锁定的方式公开。

老实说,这段话真的让我学到了。synchronized直接加载普通或者静态方法可能造成死锁。这个注解好棒啊。

@SneakyThrows如果方法内抛出检查异常,自动帮你该方法内原样抛出检查异常

这个是有点传奇色彩,正常情况下,子类抛出异常,父类也要跟着抛出异常;但是使用该注解的时候,只需要在子类使用就可以了,父类不用加,单独使用父类不会抛出异常

未加注解,父类不抛出
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
加注解,父类不抛出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述 缺点

  1. 可能和一些ORM框架冲突,所以提供了delombok可以再将注解转回源码,或者和源码对比
  2. 违背了注解存在的初衷(事实上现在很多框架都这样做了),注解开始对实际的代码产生影响,而非像原生代码一样,只起到注释作用
  3. 开发者使用了一些Java非公开的方法来进行处理,后续IDE和Java版本更新都可能造成使用上的风险

@Repository注解是什么?Spring的注解有哪些?

剩下的明天再补。。。。

标签:P4,尚医通,抛出,观后,baos,注解,lombok,父类,Data
来源: https://blog.csdn.net/yu_duan_hun/article/details/116331774

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有