>  기사  >  Java  >  Java Annotation 기능에 대한 자세한 설명

Java Annotation 기능에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-30 10:51:461210검색

Annotation이란?

Annotation은 중국어로 Annotation으로 번역되는데, 이는 프로그램 자체의 로직 외에 추가 데이터 정보를 제공한다는 의미입니다. 주석은 주석이 달린 코드와 직접적으로 상호 작용할 수 없지만 다른 구성 요소는 이 정보를 사용할 수 있습니다.

주석 정보는 class 파일로 컴파일하거나 JVM(Java Virtual Machine)에 보관하여 런타임 시 얻을 수 있습니다. 주석 자체에 주석을 추가할 수도 있습니다.

객체에는 Annotation

클래스, 메소드, 변수, 매개변수 및 패키지를 추가할 수 있습니다. 주석을 추가할 수 있습니다.

내장 주석

@Override 오버로딩상위 클래스의 @Deprecated 메서드나 유형은 더 이상 권장되지 않습니다.

@SuppressWarnings 컴파일 방지. - 시간 경고 메시지. String배열을 매개변수로 받아야 합니다. 사용 가능한 매개변수는 다음과 같습니다:

  • 선택 해제됨

  • path

  • serial

  • 마지막으로

  • fallthrough

는 주석과 함께 사용할 수 있습니다.

@ Retention

은 저장되는 Annotation의

수명주기를 결정하며, Enum 객체 RetentionPolicy를 매개변수로 받아야 합니다.

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

@Documented Documented

@Target

은 Annotation이 수정할 수 있는 범위를 나타내며 Enum 객체를 받습니다. EnumType 배열을 매개변수로 사용합니다.

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE
}

@Inherited

이 주석은 주석이 달린 클래스의 하위 클래스에 영향을 미칠 수 있습니다.

맞춤형 주석

JSE5.0 이후에는 Annotation을 맞춤설정할 수 있습니다. 다음은 간단한 예입니다.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodAnnotation {

}

다음 Person 객체는 사용자 정의 MethodAnnotation을 사용합니다.

public class Person {

    public void eat() {
        System.out.println("eating");
    }

    @MethodAnnotation
    public void walk() {
        System.out.print("walking");
    }

}

Reflection을 통해 Annotation 정보를 얻을 수 있습니다.

 Class<Person> personClass = Person.class;
        Method[] methods = personClass.getMethods();
        for(Method method : methods){
            if (method.isAnnotationPresent(MethodAnnotation.class)){
                method.invoke(personClass.newInstance());
            }
        }

출력:

walking

사용자 정의 주석에 메소드를 추가할 수도 있습니다.

@Target(ElementType.TYPE)
public @interface personAnnotation {
    int id() default 1;
    String name() default "bowen";
}

personAnnotation의 사용법은 다음과 같습니다.

@personAnnotation(id = 8, name = "john")
public class Person {

    public void eat() {
        System.out.println("eating");
    }

    @MethodAnnotation
    public void walk() {
        System.out.print("walking");
    }

}

주석 처리 방법

Java 소스 코드가 컴파일되면 컴파일러의 플러그인 주석 프로세서가 이러한 주석을 처리합니다. 프로세서는 보고서 정보를 생성하거나 추가 Java 소스 파일 또는 리소스를 생성할 수 있습니다. 주석 자체가 RententionPolicy 런타임 클래스와 함께 추가되면 Java 컴파일러는 주석의 메타데이터를 클래스 파일에 저장합니다. 그러면 JVM(Java Virtual Machine) 또는 기타 프로그램이 이 메타데이터를 찾아 그에 따라 처리할 수 있습니다.

물론 주석을 처리할 수 있는 주석 프로세서 외에도 리플렉션을 사용하여 주석을 직접 처리할 수도 있습니다. Java SE 5에는 AnnotatedElement라는

인터페이스가 있습니다. Java의 반사 객체 클래스인 Class, Constructor, Field, Method 및 Package는 모두 이 인터페이스를 구현합니다. 이 인터페이스는 현재 JVM(Java Virtual Machine)에서 실행 중인 주석이 달린 프로그램 요소를 나타내는 데 사용됩니다. 이 인터페이스를 통해 리플렉션을 사용하여 주석을 읽을 수 있습니다. AnnotatedElement 인터페이스는 RUNTIME으로 표시된 주석에 액세스할 수 있습니다. 해당 메소드는 getAnnotation, getAnnotations 및 isAnnotationPresent입니다. Annotation 유형은 클래스와 마찬가지로 바이너리로 컴파일되고 저장되므로 이러한 메소드에서 반환된 Annotation은 일반 Java 객체처럼 쿼리할 수 있습니다. Annotation의 광범위한 사용

Annotation은 다양한

프레임워크

및 라이브러리에서 널리 사용됩니다.

Junit

Junit은 매우 유명한

단위 테스트

프레임워크입니다. Junit을 사용하려면 많은 주석을 접해야 합니다.

@Runwith 사용자 정의 테스트 클래스 Runner
  • @ContextConfiguration Spring의 ApplicationContext 설정
  • @DirtiesContext Reload 다음 테스트 실행 전 ApplicationContext.
  • @Before 테스트 메서드 호출 전 초기화
  • @테스트 메서드 호출 후 처리 후
  • @Test는 해당 메소드가 테스트 메소드임을 나타냅니다.
  • @Ignore를 테스트 클래스 또는 테스트 메소드에 추가하여 작업을 무시할 수 있습니다.
  • @BeforeClass: 테스트 클래스의 모든 테스트 메서드가 실행되기 전에 호출되며 한 번만 호출됩니다(표시된 메서드는
  • 정적
  • 이어야 함)

  • @AfterClass: 테스트 클래스의 모든 테스트 메소드가 실행된 후 호출되며 한 번만 실행됩니다(표시된 메소드는 정적이어야 함)

Spring

Spring은 구성지옥이라 불리며 Annotation이 많습니다.

  • @Service 서비스 클래스에 주석 추가

  • @Repository DAO 클래스에 주석 추가

  • @Component 컴포넌트 클래스에 주석 달기

  • @Autowired Let Spring이 자동으로 Bean을 어셈블합니다

  • @Transactional 구성 항목

  • @Scope는 객체 생존 범위를 구성합니다

  • @Controller는 컨트롤러 클래스에 주석을 답니다

  • @RequestMapping URL 경로 매핑

  • @PathVariable은 메소드 매개변수를 경로에 매핑합니다.

  • @RequestParam은 요청 매개변수를 메소드 변수에 바인딩합니다.

  • @ModelAttribute는 model

  • @SessionAttributes는 세션 속성

Hibernate

  • 으로 설정됩니다. @Entity는 Entity Bean

  • @Table은 엔터티 클래스를 데이터베이스의 테이블에 매핑합니다

  • @Column은 열을 매핑합니다

  • @Id 매핑 ID

  • @GeneratedValue 이 필드는 자동으로 증가합니다

  • @버전 제어 또는 동시성 제어

  • @OrderBy Collation

  • @Lob Large Object Annotation

Hibernate 및 기타 주석 관련 Union의 설명과 을 상속받은 의 주석이 있으므로 여기에 나열하는 것은 의미가 없습니다.

JSR 303 – Bean Validation

JSR 303 – Bean Validation은 데이터 검증 사양으로, Java Bean 검증은 주로 Java Annotation을 통해 구현됩니다.

  • @Null주석: 의 요소는 null이어야 합니다.

  • @NotNull 주석이 추가됨 요소는 null이 아니어야 합니다

  • @AssertTrue주석이 있는 요소는 true여야 합니다@AssertFalse주석이 있는 요소는 false@Min(value)이어야 합니다.주석이 있는 요소는 값이 다음보다 커야 합니다. 또는 지정된 최소값과 같음

  • @Max(value) 주석이 달린 요소는 숫자여야 하며 해당 값은 지정된 최대값보다 작거나 같아야 합니다.

  • @DecimalMin(value)주석이 달린 요소는 숫자여야 하며 해당 값은 지정된 최소값보다 크거나 같아야 합니다

  • @DecimalMax( 값) 주석이 달린 요소는 다음과 같아야 합니다. 값이 지정된 최대값보다 작거나 같아야 하는 숫자입니다.

  • @Size(max, min) 주석이 달린 요소의 크기는 다음과 같아야 합니다. 지정된 범위 내

  • @Digits(정수, 분수) 주석이 달린 요소는 숫자여야 하며 해당 값은 허용 범위 내에 있어야 합니다

  • @Past 주석이 달린 요소는 과거 날짜여야 합니다

  • @Future로 주석이 달린 요소는 미래의 날짜여야 합니다

  • @Pattern(value)으로 주석이 달린 요소는 지정된 정규식

을 준수해야 합니다. 실제로 주석을 사용하는 프레임워크나 라이브러리가 많기 때문에 여기에 하나씩 나열하지는 않겠습니다. 모두가 Java의 주석에 대해 자세히 알아볼 수 있기를 바랍니다.

위 내용은 Java Annotation 기능에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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