zoukankan      html  css  js  c++  java
  • 自定义注解主要步骤

    1.自定义注解,

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TFLogAnnotation {
        String module() default "";
        String remark() default "";
        TFLogOperationType tfoperationType() default  TFLogOperationType.UNKNOWN;  //这是个枚举类,定义在同级目录下
    }

    2.枚举类(非必须)

    使用注解时手动可标注类型,更直观

    
    
    /**
    * 在自定义注解要用调用到的枚举类
    */
    @AllArgsConstructor
    @Getter
    public enum TFLogOperationType {
        UNKNOWN("unknown"),
        DELETE("delete"),
        SELECT("select"),
        UPDATE("update"),
        INSERT("insert");
    
        private String value;
    
    }

    3.实体类

    利用打日志的业务举例,织入到Spring内部的代码肯定要涉及到持久化存储。要构建日志类,根据自身的情况看是否继承基类(小项目不用)

    /**
    * 基类
    **/

    public
    class BaseEntityTF implements Serializable { private static final long serialVersionUID = 1L; private String createBy; @JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss" ) private Date createTime; private String updateBy; @JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss" ) private Date updateTime; private Map<String,Object> params; private String remarks; }
    /**
    * 操作日志实体类,数据库表名规范正确 小写 xx_xxx
    */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @TableName("DWAPP.WLOperLog")
    public class OperateLogTF extends BaseEntityTF {

    /**
    * 日志主键
    */
    @TableId("oper_id")
    private Long operId;
      
      /**具体字段涉及公司业务,此处省略

    }

    4.Service与实现

    将数据持久化到数据库这个步骤必不可少,可以用接口分开,去编写mapper的xml映射等。当然写作业的话可以简单一些的可以写到一起。实现数据的持久化存储。被切面调用

    /**
     * @auther TomasFeng
     * @date 2021/9/23-11:09
     */
    
    public interface TFLogOperateService {
    void save(OperateLogTF operateLogTF);  
    }
    @Component public class TFLogOperateServiceImpl implements TFLogOperateService { @Override public void save(OperateLogTF operateLogTF) { /** * 存到表。 */ System.out.println("save"); } }

    5.重中之重:切面类。

    规定切点表达式,以及各个切入点的逻辑代码。

    package com.mediway.mdr.base.mylog.tfaspect;
    
    /**
     * @auther TomasFeng
     * @date 2021/9/23-11:15
     */
    
    
    /**
     * 切面类,构建出日志信息。持久化存储
     */
    @Aspect
    @Component
    public class TFAspect {
    
        @Autowired
        Service 
    
        @Pointcut("@)")
        public void pointcut(){
    
        }
    
        @Around("pointcut()")
        public Object around(ProceedingJoinPoint joinPoint){
            Object result = null;
    
    //TODO  注入实体类并存到数据库
    
            return result;
    
        }
    }
    如有差错,请各位指正
  • 相关阅读:
    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
    11
    实战 迁移学习 VGG19、ResNet50、InceptionV3 实践 猫狗大战 问题
    tx2系统备份与恢复
    如何在Ubuntu 18.04上安装和卸载TeamViewer
    bzoj 3732 Network (kruskal重构树)
    bzoj2152 聪聪可可 (树形dp)
    牛客 216D 消消乐 (二分图最小点覆盖)
    牛客 197E 01串
    Wannafly挑战赛23
  • 原文地址:https://www.cnblogs.com/Timeouting-Study/p/15325104.html
Copyright © 2011-2022 走看看