1.减少无意义的查询

写非常复杂业务时一定要留意现在要的数据之前是不是查询过了,避免无意义的查询,不然会拖慢代码的执行速度,而且排查起来也非常麻烦。

2.List中for循环添加元素时new写到for外面

对象转json的依赖,lombok插件老生常谈就不写出来了

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>1.2.32</version>
  5. </dependency>

类的数据结构

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. public class Book {
  5. private int id;
  6. private String bookName;
  7. private String bookType;
  8. private Date createTime;
  9. private Date updateTime;
  10. }

演示一下new Book()在for外面的执行结果

  1. public void beanCopy() {
  2. // 创建3个对象
  3. Book book1 = new Book(1, "残酷月光", "2", new Date(), new Date());
  4. Book book2 = new Book(2, "半岛铁盒", "2", new Date(), new Date());
  5. Book book3 = new Book(3, "最长的电影", "3", new Date(), new Date());
  6. // 添加到list中
  7. List<Book> bookList = new ArrayList<>();
  8. bookList.add(book1);
  9. bookList.add(book2);
  10. bookList.add(book3);
  11. List<String> bookListString = new ArrayList<>();
  12. // 转成str后添加到list中
  13. for (Book book : bookList) {
  14. bookListString.add(JSON.toJSONString(book));
  15. }
  16. // str转成对象添加到list中
  17. List<Book> newBookList = new ArrayList<>();
  18. Book book = new Book();
  19. for (String bookString : bookListString) {
  20. BeanUtils.copyProperties(JSON.parseObject(bookString, Book.class), book);
  21. newBookList.add(book);
  22. }
  23. log.info("字符串数组{}", newBookList);
  24. }

newBookList中的全部都是id=3,因为只new了一次对象,值全部指向id=3

  1. 字符串数组[Book(id=3, bookName=最长的电影, bookType=3, createTime=Mon Sep 06 13:36:39 CST 2021, updateTime=Mon Sep 06 13:36:39 CST 2021), Book(id=3, bookName=最长的电影, bookType=3, createTime=Mon Sep 06 13:36:39 CST 2021, updateTime=Mon Sep 06 13:36:39 CST 2021), Book(id=3, bookName=最长的电影, bookType=3, createTime=Mon Sep 06 13:36:39 CST 2021, updateTime=Mon Sep 06 13:36:39 CST 2021)]

正确的做法是new Book()写到循环里面,执行一次就new一次

  1. for (String bookString : bookListString) {
  2. Book book = new Book();
  3. BeanUtils.copyProperties(JSON.parseObject(bookString, Book.class), book);
  4. newBookList.add(book);
  5. }

这次的结果就是对的

  1. 字符串数组[Book(id=1, bookName=残酷月光, bookType=2, createTime=Mon Sep 06 13:45:51 CST 2021, updateTime=Mon Sep 06 13:45:51 CST 2021), Book(id=2, bookName=半岛铁盒, bookType=2, createTime=Mon Sep 06 13:45:51 CST 2021, updateTime=Mon Sep 06 13:45:51 CST 2021), Book(id=3, bookName=最长的电影, bookType=3, createTime=Mon Sep 06 13:45:51 CST 2021, updateTime=Mon Sep 06 13:45:51 CST 2021)]

3.SpringBoot Test中与Aop冲突报错

  1. Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mathCalculator' defined in com.config.MianConfig3: Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Unexpected AOP exception; nested exception is java.lang.IllegalStateException: Unable to load cache item

这个异常有两种情况:
一、缺少aop包 二 、aop包的版本和spring的版本不对

spring-aop版本与 aspectjweaver 包版本冲突
解决办法
maven项目的spring-aop版本是5.1.9,其他的spring版本是5.2.1,aspectjweaver 版本是1.8.3,将spring-aop的版本改成5.2.1,运行正常
项目中并没有用到spring-aop包,用的是aspectjweaver ,直接将spring-aop删掉,运行正常
原文链接:https://blog.csdn.net/weixin_40230655/article/details/106634074