Spring 사용자 정의 주석 간단하게 4 단계 사용

4361 단어 Spring
실제 개발 에 서 는 요청 로그, 정시 작업 로그 등 을 기록 하 는 경우 가 많 습 니 다. 모든 방법 에서 같은 코드 를 만들어 로 그 를 기록 하 는 것 은 불합리 합 니 다.Spring 은 이미 우리 에 게 절단면 프로 그래 밍 을 위 한 사상 을 제공 하 였 으 니, 간단하게 사용자 정의 주 해 를 사용 해도 무방 하 다.간단 한 사용자 정의 주석 4 단계:
1: 설정 에서 op 프로 그래 밍 열기

    
        
    
    

class 가 가리 키 는 것 은 절단면 해석 류 아래 에 언급 될 것 입 니 다.(spring - boot 에 서 는 어떠한 설정 도 필요 없 이 op 을 직접 사용 할 수 있 습 니 다)
2: 사용자 정의 주석 작성
package com.thc.tenantcenter.aspect;
 
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LogAnnotation {
 
    String desc() default "    ";
}

3: 자신의 절단면 실현 클래스 를 작성 하 는 것 은 앞에서 말 한 bean 이 가리 키 는 경로 입 니 다.
package com.thc.tenantcenter.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect //            
@Component //    
public class LogAspect {  
  
    //           ,                  
    @AfterReturning("within(com.thc.tenantcenter..*) && @annotation(rl)")  
    public void addLogSuccess(JoinPoint jp, LogAnnotation rl){  
        Object[] parames = jp.getArgs();//           
        for (int i = 0; i < parames.length; i++) {  
            System.out.println(parames[i]);  
        }  
        System.out.println(jp.getSignature().getName());  
        String className = jp.getTarget().getClass().toString();//        
        System.out.println("className:" + className);
        className = className.substring(className.indexOf("com"));  
        String signature = jp.getSignature().toString();//          
        System.out.println("signature:" + signature);
    }  
}

4: com. thc. tenantcenter 패키지 및 하위 패키지 방법 에 자신 이 정의 한 주 해 를 추가 합 니 다.
@LogAnnotation(desc = "  ID      ")
    @Override                                                                                              
    public AdminLog getAdminLogById(Integer id) {                                                    
        return adminLogMapper.getAdminLogById(id);                                                   
    }  

실행 결 과 는:
1 getAdminLogById className:class com.thc.tenantcenter.biz.adminlog.service.impl.AdminLogServiceImpl signature:AdminLog com.thc.tenantcenter.biz.adminlog.service.impl.AdminLogServiceImpl.getAdminLogById(Integer)
네 가지 원 주해
JDK 5.0 버 전 은 자바. lang. annotation 에서 네 가지 원 주 해 를 제공 합 니 다. 다른 주 해 를 전문 적 으로 설명 합 니 다. @ Documented – 자바 문서 에 주석 정 보 를 추가 할 지 여부 @ Retention – 이 주해 의 생명주기 @ Target – 주 해 를 어디 에 사용 할 지 정의 합 니 다 @ Inherited – 하위 클래스 가 이 주 해 를 계승 할 수 있 는 지 여부
@ Retention 주 해 는 이 주해 의 생명 주 기 를 정의 합 니 다. 어떤 단계 에서 버 립 니까? Retention Policy. SOURCE – 컴 파일 단계 에서 버 립 니 다.이 주석 들 은 컴 파일 이 끝 난 후에 더 이상 의미 가 없 기 때문에 바이트 코드 를 쓰 지 않 습 니 다. @Override, @ Suppress Warnings 는 모두 이런 주해 에 속한다.
RetentionPolicy. CLASS – 클래스 로 딩 할 때 버 리 고 바이트 파일 처리 에 유용 합 니 다.주 해 는 기본적으로 이런 방식 을 사용한다.
RetentionPolicy. RUNTIME – 항상 버 리 지 않 고 실행 기간 에 도 이 주 해 를 유지 하기 때문에 반사 메커니즘 으로 이 주해 의 정 보 를 읽 을 수 있 습 니 다.사용자 정의 주 해 는 보통 이런 방식 을 사용한다.
@ Target – 이 주 해 를 어디 에 사용 하 는 지 표시 합 니 다.명확 하 게 밝 히 지 않 으 면 이 주 해 는 어디 에 나 놓 을 수 있다.속성의 주 해 는 호 환 된다.
ElementType. TYPE: 클래스, 인터페이스 또는 enum 설명 에 사용
ElementType. FIELD: 실례 변 수 를 설명 하 는 데 사용
ElementType.METHOD
ElementType.PARAMETER
ElementType.CONSTRUCTOR
ElementType.LOCAL_VARIABLE
ElementType.ANNOTATION_TYPE 다른 주석
ElementType. PACKAGE 는 자바 파일 의 패키지 정 보 를 기록 하 는 데 사 용 됩 니 다.
그렇다면 주해 의 내 부 는 도대체 어떻게 정 의 된 것 일 까?Annotations 는 기본 형식, String 및 매 거 진 형식 만 지원 합 니 다.설명 에 있 는 모든 속성 은 방법 으로 정의 되 고 기본 값 을 제공 할 수 있 습 니 다.
원본 주소:https://www.cnblogs.com/zhuxiansheng/p/7805552.html https://juejin.im/post/5d1b2312f265da1bc23f913e?utm_source=gold_browser_extension

좋은 웹페이지 즐겨찾기