做个实战锻炼下自己
实战案例背景
- 商家商品管理系统
- 记录产品的修改记录
- 什么人在什么时间修改了哪些产品的哪些字段以及修改前后的值
实现思路
- 利用 aspect 去拦截增删方法
- 利用反射去获取对象的新旧值
- 利用 @Around 的 advice 去记录操作记录
领域模型
环境/版本一览:
- 开发工具:Intellij IDEA 2018.2.2
- springboot: 2.1.0.RELEASE
- jdk:1.8.0_171
- maven:3.3.9
- spring-boot-starter-aop:2.1.0.RELEASE
- spring-boot-starter-data-jpa:2.1.0.RELEASE
- spring-boot-starter-data-mongodb:2.1.0.RELEASE
1、pom.xml
1 | <dependencies> |
2、application.yml
1 | spring: |
3、annotation
1 | package com.fatal.annotation; |
4、enums
1 | package com.fatal.enums; |
5、utils
DifferentUtil
1 | package com.fatal.util; |
ReflectUtil
1 | package com.fatal.utils; |
6、entity
ChangeItem.java
1 | package com.fatal.entity; |
Product.java
1 | package com.fatal.entity; |
Action.java
1 | package com.fatal.entity; |
Fu.java
1 | package com.fatal.entity; |
zi.java
1 | package com.fatal.entity; |
7、dao
ProductDao.java
1 | package com.fatal.dao; |
ActionDao.java
1 | package com.fatal.dao.aop; |
8、aspect
1 | package com.fatal.aspect; |
9、Test
Chapter254ApplicationTests
1 | package com.fatal; |
ReflectTests
1 | package com.fatal.reflect; |
显示
运行
Chapter254ApplicationTests.testInsert()
- 控制台
- mongodb图形化界面
mysql数据库
运行
Chapter254ApplicationTests.testUpdate()
控制台
mongodb图形化界面
mysql数据库
运行
Chapter254ApplicationTests.testDelete()
控制台
mongodb图形化界面
mysql数据库
运行
ReflectTests.getBeanInfo()
控制台
笔记
- 利用反射获取新旧值
- 利用Aroud的advice去记录修改记录
- 利用注解去增加中文名称字段名
反射知识复习:
- getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
- getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和protected,但是不包括父类的声明字段。
参考资料
总结
SpringBoot
的知识已经有前辈在我们之前探索了。比较喜欢的博主有:唐亚峰 | Battcn、方志朋的专栏、程序猿DD、纯洁的微笑。对这门技术感兴趣的可以去他们的博客逛逛。谢谢他们的分享~~
以上文章是我用来学习的Demo
,都是基于 SpringBoot2.x
版本。
源码地址: https://github.com/ynfatal/springboot2-learning/tree/master/chapter25_4