2012-02-17 2 views
6

저는 서비스 메소드가 호출되기 전이나 실행 된 직후에 런타임에 실행할 수있는 주석을 작성하려고합니다.Java 주석은 언제 실행됩니까?

런타임 또는 컴파일 타임에 실행되는지 알 수 없습니다.

답변

9

주석이 실행되지 않습니다. 다양한 도구로 읽는 메모 또는 표식입니다. 일부는 컴파일러에서 읽습니다 (예 : @Override). 다른 것들은 클래스 파일에 내장되어 있으며 런타임에 Hibernate와 같은 툴에 의해 읽혀진다. 그러나 그들은 아무 것도하지 않습니다.

대신 assertions을 생각해 볼 수 있습니다. 이전 및 이후 조건의 유효성을 검사하는 데 사용할 수 있습니다.

2

주석은 코드에 영향을주지 않으며 컴파일러 나 다른 도구로 평가할 정보를 제공하기 위해 여기에 있습니다.

주석, 그들 가운데 용도의 번호를 가지고 : 컴파일러에 대한

정보 - 주석이 오류를 감지 또는 경고를 억제하기 위해 컴파일러에 의해 사용할 수 있습니다.

컴파일러 시간 및 배포 시간 처리 - 소프트웨어 도구는 주석 정보를 처리하여 코드, XML 파일 등을 생성 할 수 있습니다.

런타임 처리 - 일부 주석은 런타임에 검사 할 수 있습니다.

이 부분은 page을 참조하십시오.

0

설정 한 보존 정책에 따라 실제로 두 환경에서 모두 읽을 수 있습니다.

6

실제로 주석을 정의 할 때 소스 코드 (SOURCE), 클래스 파일 (CLASS) 또는 런타임 (RUNTIME) 중 어노테이션을 사용할 수 있는지를 정의하는 매개 변수 @Retention을 지정해야합니다.

@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation {} 
5

어노테이션은 그냥 마커입니다. 그들은 아무 것도하지 않고 실행합니다.

서로 다른 보존 정책을 지정할 수 있습니다

  • SOURCE를 : 주석 만 소스 파일에 보관하고 컴파일시 삭제됩니다.
  • CLASS : 컴파일하는 동안 .class 파일에 저장된 주석으로, 런타임에는 사용할 수 없습니다.
  • RUNTIME : .class 파일에 저장된 주석이며 런타임에 사용 가능합니다. 여기

더 : http://www.java2s.com/Tutorial/Java/0020__Language/SpecifyingaRetentionPolicy.htm

0
  1. 주석이 소스 코드에서만 마커입니다. IDE, 컴파일러 또는 주석 프로세서와 같은 도구에서 사용됩니다.

  2. 어노테이션이 소스, 클래스 또는 런타임에서 평가되어야하는 경우 @Retention으로 정의 할 수 있습니다.

  3. 소유 한 주석을 정의하고 싶은 경우에만 주석이 수행해야 할 지식이 있으므로 주석 프로세서도 작성해야합니다. (하지만 간단하지는 않습니다 - 어쩌면)

관련 문제