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

2021/5/1 22:25:38

本文主要是介绍B站尚硅谷Java微服务+分布式+全栈项目【尚医通】观后扩展(P4-P5),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 创建了一个java的springboot项目,设置版本为2.2.1,没有说为什么
      • 如果配置其他版本,能正确运行吗?需要做出哪些改动?
    • lombok插件能干什么
          • lombok对于@Data介绍,有一句很让我注意:
          • @Getter @Setter private boolean employed = true;
          • @NonNull 非空,如果空了立刻抛空指针
          • @TOSTRING 相当于toString
          • @Data @ToString, @EqualsAndHashCode, @Getter, 加 @Setter
          • @CLEANUP 相当于try...finally块+close()
          • @Synchronized 加专门的对象对方法加锁
          • @SneakyThrows如果方法内抛出检查异常,自动帮你该方法内原样抛出检查异常
    • @Repository注解是什么?Spring的注解有哪些?

创建了一个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的注解有哪些?

剩下的明天再补。。。。



这篇关于B站尚硅谷Java微服务+分布式+全栈项目【尚医通】观后扩展(P4-P5)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程