Java学习笔记_13_空属性赋值问题+aspect日志

1.空属性赋值问题

这次开发使用的是BeanUtils.copyProperties(A,B)来完成的对象的更新。
BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
BeanUtils.copyProperties(A,B)的特点是:

  1. 无论是org.springframework.beans或者org.apache.commons.beanutils,与get/set方式相比,都存在性能问题。
  2. 效率由高到低:get/set >PropertyUtils >BeanUtils。
  3. PropertyUtils和BeanUtils两个工具类都是对bean之间存在属性名相同的属性进行处理,无论是源bean或者是目标bean中多出来的属性均不处理。
  4. 具体来说:BeanUtils.copyProperties()可以在一定范围内进行类型转换,同时还要注意一些不能转换时候,会将默认null值转化成0;

复制属性的时候,BeanUtils.copyProperties(a,b)会将a的所有属性全部赋值给b,如果a存在null属性,会将b属性原有数据覆盖,比如在更新一篇文章时,更新后的新文章创建时间如果置空,就会覆盖原来的创建时间,解决方案是遍历检查是否有null值
如下
Java学习笔记_13_空属性赋值问题+aspect日志

二.aspect日志

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。在日常开发当中经常用来记录日志,方法跟踪、事务,权限等
切面方法说明:

  • @Aspect – 作用是把当前类标识为一个切面供容器读取
  • @Pointcut – (切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
  • @Before – 标识一个前置增强方法,相当于BeforeAdvice的功能
  • @AfterReturning – 后置增强,相当于AfterReturningAdvice,方法退出时执行
  • @AfterThrowing – 异常抛出增强,相当于ThrowsAdvice
  • @After – final增强,不管是抛出异常或者正常退出都会执行
  • @Around – 环绕增强,相当于MethodInterceptor

这里用到的是 aspect

Java学习笔记_13_空属性赋值问题+aspect日志
效果展示
Java学习笔记_13_空属性赋值问题+aspect日志