自定义注解主要步骤

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;

    }
}

 

posted @ 2021-09-28 15:41  Timeouting  阅读(766)  评论(0编辑  收藏  举报