>  기사  >  Java  >  Java Reflection의 주석

Java Reflection의 주석

大家讲道理
大家讲道理원래의
2017-05-28 11:35:241267검색

"annotation"이라는 단어는 Java프로그래밍에서 상대적으로 출현율이 높다고 할 수 있으며, 자주 등장하는 주제이기도 합니다. 이전에 Spring 관련 이야기를 할 때, Spring에서 "주석"이 어떻게 결합되는지와 같은 "주석" 관련 내용에 대해 간략하게 이야기했습니다. 주석은 Java 프로그래밍에서 여전히 상대적으로 중요하기 때문에 오늘 우리 블로그에서는 주석에 대해 체계적으로 소개할 것입니다. 물론 구체적인 예에 ​​의존할 것입니다.

직접 말하면 "주석"은 데이터를 저장하는 방법입니다. 주석을 골라내면 그 기능은 평범합니다. "주석"과 Java의 "반사 메커니즘"을 결합하면 더 많은 일을 할 수 있습니다. . 즉, 리플렉션을 통해 "주석"이 제공하는 정보를 읽은 다음 특정 요구 사항에 따라 작업을 수행할 수 있습니다. 물론 우리는 XML을 사용하여 반사 메커니즘에 대한 정보를 제공했지만 "XML"의 구성은 여전히 ​​"주석"의 데이터 형식만큼 관리 및 유지 관리가 쉽지 않으므로 "주석"의 상태는 다음과 같습니다. "는 여전히 상대적으로 중요합니다.

아래에서는 먼저 "메타 주석"에 대해 설명한 다음 이러한 "메타 주석"을 기반으로 주석을 사용자 정의하고 Java의 "반사 메커니즘"을 사용하여 다양한 유형의 주석 정보를 읽습니다.

1. Meta-Annotations

이 블로그의 첫 번째 부분에서는 먼저 "Meta-Annotations"에 대해 전반적으로 살펴보고, 이를 기반으로 아래 내용을 확장합니다. 메타 주석.

1.@Target

Usage: @Target(ElementType.CONSTRUCTOR)

@Target 주석이 더 중요합니다. 네, 중국어로 Target은 “ The "대상, 위치"의 의미는 이름에서 알 수 있습니다. @Target은 우리가 만든 주석의 위치, 즉 우리가 만든 주석이 어떤 종류의 요소를 수정할 수 있는지 선언하는 데 사용됩니다. @Target의 매개변수는 ElementType의 열거형이며, 각 열거 항목은 위치를 나타냅니다. 다음은 ElementType 열거의 더 일반적으로 사용되는 값 중 일부입니다.

  • TYPE: 클래스, @Target의 매개변수가 TYPE인 경우 우리가 만드는 주석은 클래스, 인터페이스, 열거만 수정할 수 있습니다. 등 우수합니다.
  • FIELD: 필드 수정, 사용자 정의 주석이 FIELD 유형인 경우 주석은 클래스 또는 열거형의 필드, 즉 멤버 변수를 수정하는 데만 사용할 수 있습니다.
  • CONSTRUCTOR: 생성자 유형, 이 유형의 "주석"은 생성자만 수정할 수 있습니다.
  • METHOD: "메서드"를 수정하는 주석입니다.
  • PARAMETER: "메서드"의 매개변수를 수정하는 주석입니다.
  • LOCAL_VARIABLE: "지역 변수"를 수정하는 주석.

물론 위 내용은 간략한 논의이며 위의 주석 유형에 대한 구체적인 예는 아래에 나와 있습니다. 아래 스크린샷은 ElementType의 모든 옵션과 각 열거형 값의 역할을 보여줍니다. 세부 사항은 다음과 같습니다. 아래 두 가지는 다음과 같이 새로 추가 된 열거 항목입니다. RUNTIME

)

위는 @Retention을 사용하는 방법입니다. Retention의 중국어 의미는 "

retention
"입니다. 즉, 메타 주석이 "annotation" 보유를 제공한다는 의미입니다. 기간.
@Retention

은 열거형의 매개변수도 받습니다. 아래는 열거형에 포함된 유형입니다. 아래 영어 comments는 각 열거 항목의 의미를 구체적으로 부여했습니다.

 

3, @Document 및 @Inherited

이 두 주석은 상대적으로 간단합니다. @Document는 이 주석이 Javadoc에 포함되어 있음을 나타냅니다. @Inherited 는 이 주석이 하위 클래스에 상속될 수 있음을 의미합니다.

위의 소개는 다소 추상적일 수 있습니다. 다음으로 예제를 기반으로 해당 유형의 사용자 정의 주석을 작동하기 위해 반사 메커니즘을 사용하겠습니다.

2. 테스트 케이스 소개

아래 스크린샷은 본 블로그에 관련된 Demo 디렉토리와 주요 동작 카테고리입니다.

  • AnnotationTracker: 이 클래스는 Java의 "반사 메커니즘"을 통해 해당 주석 유형의 object 및 주석에 있는 관련 정보를 얻는 역할을 담당합니다. AnnotationTracker 클래스에는 모든 static 메서드가 있습니다. 정적 메서드는 관련 주석이 수정된 클래스를 전달합니다. 일반적인 구조는 다음과 같습니다.
  • CE…Annotation: 이 클래스는 다양한 유형의 주석으로, 나중에 자세히 설명하겠습니다.
  • TestClass: 이 클래스는 Annotation을 적용한 테스트 클래스입니다.
  • Main: 이 데모에 대한 테스트 사례의 실행 방법입니다. ㅋㅋㅋ s. 다음 내용에서는 수정 유형 주석을 생성한 후 해당 주석의 수정 사항을 해당 클래스에 추가하고 마지막으로 Java의 반사 메커니즘을 사용하여 해당 주석 정보를 얻습니다.

1. 주석 생성

먼저 주석을 생성합니다. 구체적인 단계는 다음과 같습니다.

Annotation

을 선택한 다음 주석 이름을 입력하고 Enter를 클릭합니다.

 아래 코드 스니펫은 생성된 주석의 세부 내용입니다. @Target 메타 주석의 매개변수가

ElementType.TYPE

유형임을 알 수 있습니다. 즉, 우리가 만든 주석은 범위가 지정된 클래스, 인터페이스, 열거형 및 기타 유형이 될 수 있는 수정 유형 주석입니다. 그런 다음

@Retention

매개변수가 RetentionPolicy.RUNTIME 유형이라는 것도 알 수 있는데, 이는 주석이 런타임까지 유지됨을 나타냅니다. 주석은 인터페이스와 유사한

@Interface

를 사용하여 선언됩니다. @Interface 뒤에는 주석 이름이 옵니다. 이 주석의 이름은

CETypeAnnotation

입니다. 공개 integer

(

int

) 유형 id

속성이 있습니다. 이 속성의 기본값은 아래와 같이 0입니다.  

2. 주석 사용

아래 코드 조각은 위 주석을 사용한 것입니다. 위에서 생성된 주석은 ElementType.TYPE 유형이므로 이 주석을 사용하여 생성한 클래스(아래 TestClass)를 수정합니다. 수정사항에 주석을 달 때, id 값을 아래 id = 10으로 설정합니다.

  

3. 수정된 유형 주석에 대한 관련 정보를 얻기 위해 리플렉션을 사용합니다.

다음으로 Java의 "반사 메커니즘"을 AnnotationTracker 클래스에 추가합니다. TestClass 클래스의 Annotation 관련 정보를 제공하며, 키코드는 다음과 같다. trackTypeAnnotation() 메소드의 매개변수는 Class 타입이며, Class의 getAnnotation() 메소드를 통해 해당 클래스의 Annotation 객체를 얻을 수 있다. 아래 빨간 박스에 표시된 대로입니다.

해당 주석 개체를 얻은 후 해당 주석의 구성 정보를 얻을 수 있습니다.

 

4. 테스트 사례 및 테스트 결과

다음으로 Main 메서드의 AnnotationTracker 클래스에서 위 메서드를 호출하고 아래와 같이 TestClass를 전달합니다. 아래는 그 내용을 출력한 것입니다.

  

IV. 기타 유형의 주석

위에서 ElementType.TYPE 유형에 대해 자세히 살펴보겠습니다. 이 주석을 사용하는 방법.

1, @Target(ElementType.CONSTRUCTOR)

다음으로 생성자를 장식하는 주석을 만들어 보겠습니다. 아래 CEConstructorAnnotation은 클래스 생성자를 수정하기 위해 만든 주석입니다. 값 필드의 기본값은 빈 string입니다.

  

2, @Target(ElementType.FIELD)

다음으로 필드 이름을 CEFieldAnnotation으로 지정하는 주석을 만듭니다. , 표시된 특정 코드 아래:

 

3, @Target(ElementType.METHOD)

다음은 우리가 만든 수정 방법의 주석입니다. 이름은 CEMethodAnnotation입니다. 구체적으로 코드 아래에 나와 있습니다.

 

4, @Target(ElementType.PARAMETER)

다음은 수정된 메서드의 매개변수에 대한 주석입니다. 이름은 다음과 같습니다.

 

5. 위에서 언급한 관련 Annotation의 사용

위에서 정의한 다양한 유형의 Annotation을 각각의 역할을 수행하는 방법으로 사용하는 방법은 다음과 같습니다. 너무 자세히 설명하지는 않겠습니다.

  

6. 반사 메커니즘을 사용하여 다양한 유형의 주석 정보를 얻습니다.

관련 주석 정보를 얻기 위해 "Java"의 반사 메커니즘을 사용하는 방법에 대해 이야기하기 전에 아래 위의 각 유형의 주석에 대한 관련 정보를 각각 얻을 것입니다. 아래 코드는 주로 AnnotationTracker의 관련 코드입니다.

1. 수정된 생성자 유형의 주석 정보를 가져옵니다

 

2. 수정된 메소드 및 메소드 매개변수의 주석 정보를 가져옵니다

 

3. 수정된 필드의 주석 정보를 가져옵니다

  

4. 테스트 케이스 및 출력 결과

 


위 내용은 Java Reflection의 주석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.