在Spring Boot项目中可以使用AOP实现自定义注解,从而实现统一、侵入性小的自定义功能。
比如我们实现一个统一打印日志的自定义注解
引入依赖项目结构org.springframework.boot spring-boot-starter-aopcom.google.guava guava18.0 com.alibaba fastjson1.2.54
D:JAVA-RES ├─.idea │ └─libraries ├─.mvn │ └─wrapper ├─src │ ├─main │ │ ├─java │ │ │ └─yeye │ │ │ └─devops │ │ │ ├─annotation │ │ │ ├─config │ │ │ ├─control │ │ │ ├─model │ │ │ └─service │ │ └─resources │ │ ├─static │ │ └─templates │ └─test │ └─java │ └─yeye │ └─devops └─target ├─classes │ └─yeye │ └─devops │ ├─annotation │ ├─config │ ├─control │ ├─model │ └─service ├─generated-sources │ └─annotations ├─generated-test-sources │ └─test-annotations └─test-classes └─yeye └─devops PS D:>定义注解
定义注解的属性:
package yeye.devops.annotation; import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @documented public @interface TraceLog { String business(); String module(); }定义切面
package yeye.devops.annotation; import com.alibaba.fastjson.JSON; import com.google.common.collect.ImmutableList; import lombok.extern.slf4j.Slf4j; 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.springframework.stereotype.Component; import java.util.List; @Aspect @Component @Slf4j public class TraceLogSupport { @Pointcut("@annotation(yeye.devops.annotation.TraceLog)") private void pointcut() { } @Before("pointcut()&&@annotation(traceLog)") public void before(JoinPoint joinPoint, TraceLog traceLog) { Object[] args = joinPoint.getArgs(); log.error(generateLog(traceLog, JSON.toJSonString(args))); } private String generateLog(TraceLog traceLog, String args) { List入参实体elements = ImmutableList.of( traceLog.business(), traceLog.module(), args ); return String.join(";", elements); } }
package yeye.devops.model; import lombok.Data; @Data public class LoginParam { private String username; private String password; }验证
curl http://127.0.0.1:8080/login?username=knight&password=zlong # 结果返回 LoginParam(username=knight, password=zlong)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)