spring 사용자 정의 설명
Annontation 은 자바 5 가 도입 하기 시작 한 새로운 특징 으로 모든 정보 나 메타 데이터 (metadata) 를 프로그램 요소 (클래스, 방법, 구성원 변수 등) 와 연결 시 키 는 안전 한 주석 과 유사 한 메커니즘 을 제공 합 니 다.프로그램의 요소 (클래스, 방법, 구성원 변수) 에 더욱 직관 적 이 고 명확 한 설명 을 더 하기 위해 이런 설명 정 보 는 프로그램의 업무 논리 와 무관 하고 지정 한 도구 나 프레임 워 크 에 사용 된다.Annontation 은 일종 의 수정자 처럼 가방, 유형, 구조 방법, 방법, 구성원 변수, 파라미터 와 로 컬 변수의 성명 문 에 응용 된다.
주해 자 체 는 기능 이 없 는 것 입 니 다. xml 과 마찬가지 로 주 해 는 xml 와 같은 메타 데이터 입 니 다. 메타 데 이 터 는 데 이 터 를 해석 하 는 데이터 입 니 다. 속칭 설정 이 라 고 합 니 다. 자바 주 해 는 코드 에 추 가 된 메타 정보 로 일부 도구 가 컴 파일, 실행 할 때 해석 하고 사용 하 며 설명, 설정 기능 을 합 니 다.주 해 는 코드 의 실제 논리 에 영향 을 주지 않 고 보조 적 인 역할 만 한다.java. lang. annotation 패키지 에 포함 되 어 있 습 니 다.
2. 주해 의 용도
a. 문서 생 성.이것 은 가장 흔히 볼 수 있 는 것 이자 자바 가 최초 로 제공 한 주해 이다.@ param @ return 등 b, 추적 코드 의존성 을 사용 하여 대체 프로필 기능 을 실현 합 니 다.예 를 들 어 Dagger 2 는 주입 에 의존 하고 미래 자바 개발 은 대량의 주석 설정 을 사용 하여 큰 도움 이 될 것 입 니 다.c. 컴 파일 할 때 형식 검 사 를 합 니 다.@ override 를 방법 앞 에 두 면 이 방법 이 초 류 방법 을 덮어 쓰 지 않 았 다 면 컴 파일 할 때 확인 할 수 있 습 니 다.
3. 주해 의 원리
주해 본질은 Annotation 을 계승 한 특수 인터페이스 로 그 구체 적 인 실현 류 는 자바 가 실 행 될 때 생 성 된 동적 에이전트 류 이다.반 사 를 통 해 주 해 를 가 져 올 때 자바 가 실 행 될 때 생 성 된 동적 프 록 시 대상 $Proxy 1 을 되 돌려 줍 니 다.프 록 시 대상 을 통 해 사용자 정의 주석 (인터페이스) 을 호출 하 는 방법 은 AnnotationInvocation Handler 의 invoke 방법 을 최종 적 으로 호출 합 니 다.이 방법 은 memberValues 라 는 맵 에서 해당 하 는 값 을 색인 합 니 다.member Values 의 출처 는 자바 상수 탱크 입 니 다.
JAVA 는 자주 사용 하 는 4 가지 원 주 해 를 제공 합 니 다.
java. lang. annotation 은 네 가지 원 주 해 를 제공 합 니 다. 다른 주 해 를 전문 적 으로 설명 합 니 다. @ Target – 주 해 는 어디 에 사용 되 는 지, 기본 값 은 모든 요소 이 며, 이 주 해 는 어디 에 사용 되 는 지 표시 합 니 다.사용 가능 한 Element Type 지정 매개 변수 와 여러 개 를 동시에 지정 합 니 다. ● Element Type. CONSTRUCTOR: 구조 기 설명 에 사용 ● ElementType. FIELD: 구성원 변수, 대상, 속성 (enum 인 스 턴 스 포함) ● ElementType.LOCAL_VARIABLE: 부분 변 수 를 설명 하 는 데 사용 합 니 다. ● ElementType. METHOD: 기술 방법 ● ElementType. PACKAGE: 패키지 설명 에 사용 ● ElementType. PARAMETER: 매개 변 수 를 설명 하 는 데 사용 ● Element Type. TYPE: 클래스, 인터페이스 (주해 유형 포함) 또는 enum 설명 에 사용
@ Retention – 이 주 해 를 언제 사용 합 니까? 즉, 주 해 된 수명 주 기 를 RetentionPolicy 로 지정 합 니 다. ● Retention Policy. SOURCE: 컴 파일 단계 에서 버 립 니 다.이 주석 들 은 컴 파일 이 끝 난 후에 더 이상 의미 가 없 기 때문에 바이트 코드 를 쓰 지 않 습 니 다. @Override, @ Suppress Warnings 는 모두 이런 주해 에 속한다. ● Retention Policy. CLASS: 클래스 를 불 러 올 때 버 립 니 다.바이트 파일 처리 에 유용 합 니 다.주 해 는 기본적으로 이런 방식 을 사용한다 ● RetentionPolicy. RUNTIME: 항상 버 리 지 않 고 실행 기간 에 도 이 주 해 를 유지 하기 때문에 반사 체 제 를 사용 하여 이 주 해 를 읽 을 수 있 습 니 다.사용자 정의 주 해 는 보통 이런 방식 을 사용 합 니 다.
@ Documented – 자바 Doc 에 포 함 될 지 여부
@ Inherited – 하위 클래스 가 이 주 해 를 계승 할 수 있 는 지 여부 @Inherited 원 주 해 는 태그 주석 입 니 다. @ Inherited 는 표 시 된 유형 이 계승 되 었 음 을 논술 하 였 습 니 다.@ Inherited 수식 을 사용 한 annotation 형식 이 class 에 사용 되면 이 annotation 은 class 의 하위 클래스 에 사 용 됩 니 다.
사용자 정의 주석 클래스 작성 규칙:
사용자 정의 주석
다음은 자주 사용 하 는 사용자 정의 주석 데모 입 니 다.
@Target({ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Audit {
OpsType opsType() default OpsType.APP;
OpsCategory category() default OpsCategory.APP;
OpsMode mode() default OpsMode.ADD;
String modelExpression() default "";
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Configuration
@ComponentScan
public @interface KakaConfiguration {
public String[] value() default {}; // value
}
/**
*
*/
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface NoLogin {
}
/**
*
*/
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface NoAuth {
}
사용자 정의 주석 형식: Public @interface 주해 명 {정의 체}
주석 에 있 는 구성원 은 Public 또는 기본 (default) 두 개의 접근 권 으로 만 수식 할 수 있 습 니 다. 매개 변수 구성원 이 한 명 만 있 으 면 매개 변수 이름 을 'value' 로 설정 하 는 것 이 좋 습 니 다.
조합 주해 와 원 주해
원 주 해 는 바로 주 해 를 할 수 있 는 것 이다. 사실은 다른 주해 에 주 해 를 할 수 있 는 주해 이다. 주 해 를 받 은 주 해 는 조합 주해 가 되 고 조합 주해 도 원 주해 의 기능 을 가진다.
6. 주석 가 져 오기 및 사용
Class 대상 반사 로 class 대상 획득, Class 대상 을 통 해 필드 필드 획득, 방법 Method 등
isAnnotationPresent (주해. class) 방법 으로 필드 (또는 방법 상) 에 주해 가 있 는 지 판단 한 다음 에. getAnnotation (주해. class). value (). toString () 을 통 해 주해 의 value 값 을 가 져 옵 니 다. 일반적으로 주 해 를 정의 합 니 다. 저 희 는 springMVC 의 차단기 나 SpringAOP 에서 주 해 를 가 져 오 는 값 을 차단 하여 해당 하 는 처 리 를 합 니 다.
String nameSpace =method.getAnnotation(QueryCache.class).nameSpace().toString();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.