首页 > 其他分享 >AOP和反射的使用——自动填充公共字段

AOP和反射的使用——自动填充公共字段

时间:2023-09-17 20:35:09浏览次数:40  
标签:反射 setUpdateTime 填充 AOP entity getDeclaredMethod LocalDateTime class

  在写业务代码时候,我们经常会在业务层对数据实体进行一些重复的传参,例如更新日期时间。这太麻烦了,为了减轻代码量,我们可以利用AOP和反射对代码进行一些调整,免去这些重复操作。也帮助我们对反射的实际应用有一定认识。

 

  首先自定义一个注解

@Target(ElementType.METHOD)//指定该注解需要加在什么地方,这里设置是加在方法上
@Retention(RetentionPolicy.RUNTIME)//指定该注解保留多久,这里设置是一直保留到jvm加载class文件后仍然保留
public @interface AutoFill {
    OperationType value();
}

   

  书写切面类AOP,将注解定义在mapper层方法中,在方法执行之前将参数传入

@Aspect
@Component//一定要记得将AOP加入IOC容器中
@Slf4j
public class AutoFillAspect {

    @Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")
    public void autoFillPointcut(){};

    @Before("autoFillPointcut()")
    public void autoFill(JoinPoint joinPoint){
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();//Signature中没有getMethod()方法,所以转为子接口去调用
        AutoFill annotation = signature.getMethod().getAnnotation(AutoFill.class);
        OperationType operationType=annotation.value();

        Object[] entity = joinPoint.getArgs();//获取方法的所有参数

        if (entity==null || entity.length==0)return;//一般不会出现这个情况

        //这里需要说明一点,枚举类在大多数情况下是可以用==替代equals()的,且性能会更好些。
        //但需要注意的是,==不会抛出 NullPointerException 异常,且==在编译期间会检测a与b的类型兼容性
        if (operationType==OperationType.INSERT){
            try {//getDeclaredMethod()和invoke()可能会抛异常
                Method setCreateTime = entity[0].getClass().getDeclaredMethod("setCreateTime", LocalDateTime.class);//利用反射获取对象方法,传入方法名和参数类型
                Method setUpdateTime = entity[0].getClass().getDeclaredMethod("setUpdateTime", LocalDateTime.class);

                setCreateTime.invoke(entity[0], LocalDateTime.now());//利用反射调用entity[0]的setCreateTime方法,传参
                setUpdateTime.invoke(entity[0], LocalDateTime.now());

            } catch (Exception e) {
                e.printStackTrace();
            }
        } else if (operationType==OperationType.UPDATE) {
            try {//getDeclaredMethod()和invoke()可能会抛异常
                Method setUpdateTime = entity[0].getClass().getDeclaredMethod("setUpdateTime", LocalDateTime.class);

                setUpdateTime.invoke(entity[0], LocalDateTime.now());

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

 

标签:反射,setUpdateTime,填充,AOP,entity,getDeclaredMethod,LocalDateTime,class
From: https://www.cnblogs.com/cyknote/p/17709725.html

相关文章

  • Java反射
    声明:本文记录基于JDK8(8u211)的继承使用规则如果存在错误,请发邮件至[email protected]联系我创作时间:2023-09-1617:00:21创作情况:失业第46天,地处成都金牛区创作者:一口吃不成胖子反射准备工作,以供对照描述与代码,想看结论直接到文末尾父类packagecom.beans;/***抽象......
  • SpringBoot Redis使用AOP防止重复提交
    自定义注解importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/***@ProjectName:gswr-ets-cloud*@ClassName:*@Description:防止重复提交的自定义......
  • JAVA反射(一)获取Class对象的三种方式及其区别
    publicclassClassModel{static{System.out.println("staticblock");}{System.out.println("dynamicblock");}}publicclassClassTest{publicstaticvoidmain(String[]args){//方式......
  • 《动手学深度学习 Pytorch版》 6.7 填充和步幅
    6.3.1填充虽然我们用的卷积核较小,每次只会丢失几像素,但是如果应用多层连续的卷积层,累积的像素丢失就会很多。解决此问题的方法为填充。填充后的输出形状将为\((n_h-k_h+p_h+1)\times(n_w-k_w+p_w+1)\)importtorchfromtorchimportnndefcomp_conv2d(conv2d,X):X......
  • 深入探讨Spring全家桶的AOP实现原理
    前言Spring全家桶是Java开发中最常用的框架之一,其中AOP是Spring框架的核心之一。本文将深入探讨Spring全家桶的AOP实现原理。AOP简介AOP(AspectOrientedProgramming)是一种编程范式,它通过在程序运行时动态地将代码切入到类的指定方法、指定位置上,实现对原有代码的增强。AOP的主......
  • 深入理解Java中的反射机制
    什么是反射机制Java中的反射机制是指在运行时获取类的信息并操作类的属性、方法和构造函数等。通过反射机制,我们可以在运行时动态地创建对象、调用方法和访问属性等,而不需要在编译时确定这些信息。反射机制的应用场景反射机制在Java中有着广泛的应用场景,比如:动态代理动态代......
  • 反射实现插件式开发
    前言插件式架构,一种全新的、开放性的、高扩展性的架构体系。插件式架构设计好处很多,把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现。扩展功能与框架以一种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。基于插件设计并不神秘,相反它比起一团泥......
  • 3.反射
    JAVA反射机制:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象方法的功能称为java语言的反射机制。一个反射解析器:运用泛型、反射、集合类等相关知识实现一个API参数解析器......
  • 第二十章 反射机制
    20.1基本概念通常情况下编写代码都是固定的,无论运行多少次执行的结果也是固定的,在某些特殊场合中编写代码时不确定要创建什么类型的对象,也不确定要调用什么样的方法,这些都希望通过运行时传递的参数来决定,该机制叫做动态编程技术,也就是反射机制。通俗来说,反射机制就是用于动......
  • AOP防止连续点击新增接口
    防止连续点击的实现方式有很多种,比如,在所有的onclick里面加上防多次点击的代码,或者定义一个新的OnClickListener,在里面加上防多次点击的代码,然后项目中的所有OnClickListener都用这个listener,当然还有一些其他的方式,这里将介绍一种新的方式来实现,那就是aop。实现原理:自定义防止......