网站登陆系统怎么做,抄袭别人网站的前端代码合法吗,wordpress转播,妇科医院手机网站源码自定义注解类型和常用场景
可以参考之前的文章 #xff1a; ElementType.FIELD字段级注解声明
如果在项目中#xff0c;多处地方都需调用到同一个方法进行逻辑处理#xff0c;且与方法的业务逻辑无关#xff0c;比如监控#xff0c;日志等#xff0c;则可用自定义的方法…自定义注解类型和常用场景
可以参考之前的文章 ElementType.FIELD字段级注解声明
如果在项目中多处地方都需调用到同一个方法进行逻辑处理且与方法的业务逻辑无关比如监控日志等则可用自定义的方法来实现使得代码更加简洁、易于维护提高可读性。
METHOD-自定义方法注解完整步骤
1.定义一个自定义的METHOD注解可以带参数和不带参数
2.针对该注解创建一个切面类进行逻辑处理
3.如何作用在不同方法上自定义METHOD注解
Target(ElementType.METHOD)表示该定义作用在类的方法上。
package com.power.aspect.annotation;
import java.lang.annotation.*;
Target(ElementType.METHOD)
Retention(RetentionPolicy.RUNTIME)
Documented
//自定义日志注解传入参数value
public interface PowerLog {String value();
}
创建对应的切面类
切面类针对自定义PowerLog注解进行逻辑处理AOP面向切面编程的一种实现Around环绕通知表示在目标方法前后进行额外操作其他相关内容可以去查看AOP的官方说明。
Slf4j
Component
Aspect
public class PowerLogAspect {AutowiredLogUtil logUtil;//定义切点所有使用到PowerLog的地方都会被该切面类监控到并进行处理//annotation(powerLog) 中的参数需要跟point(PowerLog powerLog)定义的名称一模一样目前这个都是小写的。Pointcut(annotation(com.power.aspect.annotation.PowerLog) annotation(powerLog))public void point(PowerLog powerLog) {}//环绕通知Around注解用于在目标方法前后进行额外操作。通过使用该注解可以对目标方法进行包装或者修改其行为。Around(point(powerLog))public Object aroundPower(ProceedingJoinPoint point, PowerLog powerLog) throws Throwable {//powerLog注解的value参数值String value powerLog.value();//1.目前方法之前调用log.info(调用时间1new Date());//2.目标方法调用 Object response point.proceed();//3.目前方法之后调用比如记录方法调用日志记录log.info(调用时间2new Date());try {//自定义日志工具类下面三个参数对应value日志类型方法输入对象返回对象 logUtil.log(value, JSONObject.toJSONString(point.getArgs()), JSONObject.toJSONString(response));} catch (Exception e) {log.error(添加日志报错, e);}return response;}
}实际调用演示
两个方法都使用了PowerLog 注解所有调用方法的操作都会触发注解对应的切面类逻辑并根据value的参数值“login”,“logout”来记录对应的日志。
RestController
Slf4j
public class LoginController {OverridePowerLog(login)public String loginUser(UserDto userDto) {//登录的逻辑return ;}PowerLog(logout)public String logoutUser(UserDto userDto) {//登出的逻辑return ;}
}