Spring Boot 는 사용자 정의 주 해 를 통 해 로그 인쇄 를 어떻게 실현 하 는 지 상세 하 게 설명 합 니 다.
5576 단어 springboot사용자 정의 주석로그
일상적인 개발 과정 에서 상세 한 로그 정 보 를 인쇄 함으로써 개발 과정 에서 나타 날 수 있 는 버그 를 잘 발견 할 수 있 습 니 다.특히 Controller 층 의 인 터 페 이 스 를 개발 할 때 저 희 는 Request 요청 파라미터 와 Response 응답 결 과 를 출력 합 니 다.그러나 이 인쇄 로그 의 코드 가 상대 적 으로 중복 된다 면,그러면 우 리 는 어떤 방식 으로 로그 인쇄 코드 를 간소화 할 수 있 습 니까?
SpringBoot 는 사용자 정의 주 해 를 통 해 권한 검 사 를 할 수 있 습 니 다.제 블 로 그 를 참고 하 십시오SpringBoot 는 사용자 정의 주 해 를 통 해 권한 검 사 를 실현 합 니 다.
본문
Spring AOP
Spring AOP 는 절단면 을 향 한 것 으로 OOP 대상 을 향 한 연장 이다.
AOP 메커니즘 은 개발 자가 업무 프로 세 스에 서 통용 되 는 기능 을 추출 하여 기능 코드 를 단독으로 작성 하도록 할 수 있다.업무 프로 세 스 를 실행 하 는 과정 에서 Spring 프레임 워 크 는 업무 프로 세 스 의 요구 에 따라 독립 적 으로 작 성 된 기능 코드 를 프로 세 스 의 적당 한 위치 에 자동 으로 삽입 합 니 다.
저 희 는 AOP 체 제 를 통 해 Authentication 권한 검사,Caching 캐 시,Context passing 내용 전달,Error handling 오류 처리,로그 인쇄 등 기능 을 실현 할 수 있 습 니 다.여기 서 Spring AOP 로 로그 인쇄 를 어떻게 하 는 지 말씀 드 리 겠 습 니 다.
SpringBoot 는 사용자 정의 주 해 를 통 해 로그 인쇄 를 실현 합 니 다.
Maven 의존
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<optional>true</optional>
</dependency>
<!--Spring AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
ControllerMethodLog.class 사용자 정의 주석4.567917.@Retention:주 해 를 수식 하 는 데 사용 되 며 주해 의 주해 로 원 주해 라 고 합 니 다@Target:대상 의 역할 범 위 를 설명 하 는 데 사 용 됩 니 다@Documented:태그 로 사용
/**
* Controller
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface ControllerMethodLog {
}
여기 서 특별히@Retention 에 대해 말씀 드 리 겠 습 니 다.생명주기 에 따라 3 가지 로 나 눌 수 있 습 니 다.Spring AOP 절단면 방법의 집행 순서
단면 적 인 집행 방법 과 그 집행 순 서 를 간단하게 소개 합 니 다.
@Around 알림 방법 은 목표 방법 을 봉인 합 니 다@Before 알림 방법 은 목표 방법 이 호출 되 기 전에 실 행 됩 니 다
Controller MethodLogAspect.class:로 그 를 인쇄 하 는 절단면 정의 클래스
시작 클래스 에서 이 class 를 스 캔 하고@EnableAspectJAutoProxy(proxy TargetClass=true)를 추가 하 는 것 을 주의 하 십시오.
@Slf4j
@Component
@Aspect
public class ControllerMethodLogAspect {
@Pointcut("@annotation(com.xiyuan.demo.annotation.ControllerMethodLog)")
public void pointCut() {
}
/**
*
*/
@Before("pointCut()")
public void doBefore(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
ControllerMethodLog annotation = method.getAnnotation(ControllerMethodLog.class);
if (Objects.isNull(annotation)) {
return;
}
String methodName = method.getDeclaringClass().getSimpleName() + "." + method.getName();
log.info("start {}: :{}", methodName, JSON.toJSONString(joinPoint.getArgs()));
}
/**
* ,
*
* @param joinPoint
* @param result
*/
@AfterReturning(value = "pointCut()", returning = "result")
public void afterReturn(JoinPoint joinPoint, Object result) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
ControllerMethodLog annotation = method.getAnnotation(ControllerMethodLog.class);
if (Objects.isNull(annotation)) {
return;
}
String methodName = method.getDeclaringClass().getSimpleName() + "." + method.getName();
log.info("end {}: :{}", methodName, JSON.toJSONString(result));
}
}
검증 하 다.getUserById:id 에 따라 사용자 정보 얻 기
@GetMapping("/getUserById")
@ApiOperation(value = " id ")
@ControllerMethodLog
public ResponseResult getUserById(@RequestParam(name = "id", required = true) String id) {
UserInfoPojo userInfoPojo = userService.getUserById(id);
return ResponseResult.success(userInfoPojo, ConstantsUtil.QUERY_SUCCESS);
}
Swagger 인터페이스 정 보 는 다음 과 같 습 니 다.IDEA 콘 솔 인쇄 정 보 는 다음 과 같 습 니 다.
총결산
Spring Boot 가 사용자 정의 주 해 를 통 해 로그 인쇄 를 실현 하 는 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot 사용자 정의 주 해 를 통 해 로그 인쇄 를 실현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.