如何轻松搞定CRUD的创建人、修改人、时间等字段的赋值

public class CommonDaoAspect {

private static final String creater = “creater”;

private static final String createTime = “createTime”;

private static final String updater = “updater”;

private static final String updateTime = “updateTime”;

@Pointcut(“execution(* com.xx.xxxx..dao..update*(…))”)

public void daoUpdate() {

}

@Pointcut(“execution(* com.xx.xxxx..dao..insert*(…))”)

public void daoCreate() {

}

@Around(“daoUpdate()”)

public Object doDaoUpdate(ProceedingJoinPoint pjp) throws Throwable {

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

if (attributes == null) {

return pjp.proceed();

}

HttpServletRequest request = attributes.getRequest();

String token = request.getHeader(“token”);

String username = getUserName();

if (token != null && username != null) {

Object[] objects = pjp.getArgs();

if (objects != null && objects.length > 0) {

for (Object arg : objects) {

BeanUtils.setProperty(arg, updater, username);

BeanUtils.setProperty(arg, updateTime, new Date());

}

}

}

Object object = pjp.proceed();

return object;

}

@Around(“daoCreate()”)

public Object doDaoCreate(ProceedingJoinPoint pjp) throws Throwable {

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

if (attributes == null) {

return pjp.proceed();

}

Object[] objects = pjp.getArgs();

if (objects != null && objects.length > 0) {

for (Object arg : objects) {

String username = getUserName();

if (username != null) {

if (StringUtils.isBlank(BeanUtils.getProperty(arg, creater))) {

BeanUtils.setProperty(arg, creater, username);

}

if (StringUtils.isBlank(BeanUtils.getProperty(arg, createTime))) {

BeanUtils.setProperty(arg, createTime, new Date());

}

}

}

}

Object object = pjp.proceed();

return object;

}

private String getUserName() {

return UserUtils.getUsername();

}

}

代码介绍及注解说明

1.代码介绍

核心代码声明了一个CommonDaoAspect切面类,实体类中声明了4个核心方法和一个获取用户名信息的方法,UserUtils是项目中声明的工具类,包含获取用户id、姓名等一些基础信息,大家可以根据自己的实际情况去定义,不要照部就搬。4个核心方法中,daoUpdate和daoCreate上添加了@Pointcut注解,该注解通过声明正则表达式来确定项目包中dao目录下哪些方法执行该切面方法。doDaoUpdate和doDaoCreate方法上添加了@Around注解,注解中引入了上述两个方法,表示环绕通知,在我们自己dao目录下的对应文件目标方法完成前后做增强处理。

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

找小编(vip1024c)领取
assandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算…

[外链图片转存中…(img-CZZi8UoZ-1721727081746)]

找小编(vip1024c)领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值