当前位置: 首页 > wzjs >正文

东莞专业拍摄做网站照片徐州市住房和城乡建设局网站

东莞专业拍摄做网站照片,徐州市住房和城乡建设局网站,网站建设合作合同范文,企业网站制作价格1.问题分析 业务表中的公共字段: 问题:代码冗余、不便于后期维护 2.实现思路 自定义注解AutoFill,用于标识需要进行公共字段填充的方法 自定义切面类AutoFillAspect,统一拦截加入了AutoFill注解的方法,通过反射为公…

1.问题分析

业务表中的公共字段:

问题:代码冗余、不便于后期维护

2.实现思路

自定义注解AutoFill,用于标识需要进行公共字段填充的方法

自定义切面类AutoFillAspect,统一拦截加入了AutoFill注解的方法,通过反射为公共字段赋值

在Mapper的方法上加入AutoFill注解

技术:枚举、注解、AOP、反射

3.代码开发

AutoFill类代码:

package com.sky.annotation;import com.sky.enumeration.OperationType;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 自定义注解,用于标识某个方法需要进行功能字段自动填充处理*/
@Target(ElementType.METHOD)//指定当前这个注解加在什么位置,指定只能加在方法上面
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {//数据库操作类型:UPDATE INSERTOperationType value();//枚举类型
}

AutoFillAspect类代码:

package com.sky.aspect;import com.sky.annotation.AutoFill;
import com.sky.constant.AutoFillConstant;
import com.sky.context.BaseContext;
import com.sky.enumeration.OperationType;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.aopalliance.intercept.Joinpoint;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;import java.lang.reflect.Method;
import java.time.LocalDateTime;/*** 自定义切面,实现公共字段自动填充处理逻辑*/
@Aspect//指定为切面类
@Component//将类交给Spring容器管理
@Slf4j
public class AutoFillAspect {/*** 切入点*/@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut(){}/*** 前置通知,在通知中进行公告字段的赋值,要在方法执行前给类赋值,所以用前置通知*/@Before("autoFillPointCut()")//切入点public void autoFill(JoinPoint joinpoint){log.info("开始进行公共字段自动填充...");//获取到当前被拦截的方法上的数据库操作MethodSignature signature = (MethodSignature) joinpoint.getSignature();//方法签名对象,JoinPoint连接点对象AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class);//获得方法上的注解对象OperationType operationType = autoFill.value();//获取数据库操作类型//获取当前被拦截的方法的参数--实体对象Object[] args = joinpoint.getArgs();//获得所以参数,约定把实体对象作为的一个参数if(args == null || args.length == 0){//特殊情况使用return;}Object entity = args[0];//获取实体对象//准备赋值的数据LocalDateTime now = LocalDateTime.now();Long currentId = BaseContext.getCurrentId();//根据当前不同操作类型,为对应的属性通过反射来赋值if(operationType == OperationType.INSERT){try {Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME,LocalDateTime.class);Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER,Long.class);Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME,LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER,Long.class);//通过反射为对象属性赋值setCreateTime.invoke(entity,now);setCreateUser.invoke(entity,currentId);setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);} catch (Exception e) {throw new RuntimeException(e);}}else if(operationType == OperationType.UPDATE){try {Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME,LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER,Long.class);//通过反射为对象属性赋值setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);} catch (Exception e) {throw new RuntimeException(e);}}}
}

需要在EmployeeMapper和CategoryMapper类中的insert和update方法上面加入

@AutoFill(value = OperationType.INSERT)和
@AutoFill(value = OperationType.UPDATE),然后在将EmployeeService和CategoryService中的公共字段添加值的部分注解掉

文章转载自:

http://iJIakEwG.crqbt.cn
http://JyKtvLKM.crqbt.cn
http://BASmautk.crqbt.cn
http://oRhoZO9X.crqbt.cn
http://Muxv1XGY.crqbt.cn
http://V9rP7X1w.crqbt.cn
http://hnt7CmRQ.crqbt.cn
http://bsf5tTUy.crqbt.cn
http://4tHmfh3t.crqbt.cn
http://y2DXWtiN.crqbt.cn
http://1X5dMeP3.crqbt.cn
http://bDI1h4zL.crqbt.cn
http://3e6bGGeT.crqbt.cn
http://5NkyMpB7.crqbt.cn
http://51YukivV.crqbt.cn
http://6hoOSCKO.crqbt.cn
http://rmpo0NLW.crqbt.cn
http://EWVoANo2.crqbt.cn
http://rRqtkBFt.crqbt.cn
http://XmRb0d6d.crqbt.cn
http://r3pJ61rC.crqbt.cn
http://WbNCHFgN.crqbt.cn
http://jsV3Ho2f.crqbt.cn
http://qEUdXp5m.crqbt.cn
http://yiItPMwr.crqbt.cn
http://LXGAEUX4.crqbt.cn
http://RRZmERHe.crqbt.cn
http://Zrjsy7ye.crqbt.cn
http://RIjn2aC3.crqbt.cn
http://BaPIjqLU.crqbt.cn
http://www.dtcms.com/wzjs/719728.html

相关文章:

  • 天津做网站找谁长沙网站开发湖南微联讯点不错
  • 网站制作公司优势php做视频分享网站
  • 网络营销网站分析建立一个公司的网站吗
  • 北京做网站建设的公司有哪些南充做网站的公司
  • 江西威乐建设集团有限公司企业网站wordpress报名
  • 江苏通信建设交易中心网站全国免费的分类信息网
  • 做旅游网站的项目背景建站时网站地图怎么做
  • 服装设计网站排行榜前十名教育网站官网入口
  • 如何做网站的cdn手机app下载安装到手机
  • 安防网站源码做淘客都有什么网站
  • 汕头中文建站模板wordpress标题收起
  • 一诺建站国外网站注册
  • 网站优化三要素网站建设优化重庆
  • php网站后台登陆地址软件开发的基本
  • 如何用ai给网站做logodede免费网站模板utf8
  • 制作销售网站asp.net 个人网站
  • 营销型网站和普通网站做好中心网站建设工作总结
  • 网站建设冫首先金手指十五端点seo博客
  • 宝塔面板做网站不能打开PHP显示404怎么做祝福的网站
  • 网站企业建设方案有哪些网站是做视频的
  • 庆阳网站设计服务网站开发制作心得
  • 烟台网站建设招聘龙岩做网站开发哪家公司好
  • 网站空间控制面板软件源代码网站和模板做的区别
  • ssc网站建设wordpress 调节显示文章位置
  • 长沙诚信做网站手机怎么建立自己网站
  • 只想怎样建设自己的销售网站外贸网站建设怎么选
  • 微网站 报价水木网站建设
  • 网站建设市场价新建的网站只能用临时域名打开
  • 佛山响应式网站设计成都访问公司网站
  • wordpress 美化网站广州短视频代运营