본문 바로가기
Spring

커스텀 어노테이션 (@Target, @Retention)

by 홍굴이 2021. 6. 3.

커스텀 어노테이션 생성 규칙

  1. 어노테이션 타입은 @interface로 정의
  2. 모든 어노테이션은 java.lang.Annotation 인터페이스를 상속하기 때문에 다른 클래스나 인터페이스를 상속받으면 안 된다.
  3. 파라미터 멤버들의 접근자는 public이거나 default로 설정
  4. 파라미터 멤버들은 기본형과 String, Enum, Class, 어노테이션만 사용 가능
  5. 예외를 선언할 수 없다.
  6. 요소의 () 안에 매개변수를 선언할 수 없다.

 

[CustomAnnotation]

Spring Data Jpa -> Repository를 테스트하기 위해 커스텀 어노테이션 작성

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@DataJpaTest(includeFilters = @ComponentScan.Filter(
        type = ASSIGNABLE_TYPE,
        classes = {JpaAuditConfig.class, BaseEntity.class}))
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
public @interface RepositoryTest {
}

@DataJpaTest : Jpa 필요한 클래스들만 로딩되어 테스트 속도 향상

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) : 내장된 임베디드 데이터베이스가 아닌 실제 연결된 Database를 사용하게 함.

 

 

@Target : 자바 컴파일러가 어노테이션이 어디에 적용될지 결정하기 위해 사용

  • Default : 모든 대상
  • @Target(ElementType.TYPE) : 타입 (class, interface, enum) 선언부
  • @Target(ElementType.FIELD) : 멤버 변수 선언부
  • @Target(ElementType.METHOD) : 메소드 선언부
  • @Target(ElementType.PARAMETER) : 매개변수 선언부
  • @Target(ElementType.CONSTRUCTOR) : 생성자 선언부
  • @Target(ElementType.LOCAL_VARIABLE) : 지역 변수 선언부
  • @Target(ElementType.ANNOTATION_TYPE) : 어노테이션 타입 선언부
  • @Target(ElementType.PACKAGE) : 패키지 선언부
  • @Target(ElementType.TYPE_PARAMETER) : 매개변수 타입 선언부
  • @Target(ElementType.TYPE_USE) : 타입 사용부

 

@Retention : 어노테이션의 지속 시간을 결정

  • RetentionPolicy.SOURCE : 컴파일 후에 정보들이 사라진다. / 컴파일이 완료되면 의미가 없어지므로, 바이트 코드에 기록되지 않는다.
  • RetentionPolicy.CLASS : 컴파일 타임 때만 .class 파일에 존재하며, 런타임 때는 없어진다. / 바이트 코드 레벨에서 어떤 작업을 해야 할 때 유용하다.
  • RetentionPolicy.RUNTIME : 런타임시에도 .class 파일에 존재합니다. / 커스텀 어노테이션을 만들 때 주로 사용

 

@Inherited : 자식 클래스에 상속할지 결정

'Spring' 카테고리의 다른 글

AOP 정리  (0) 2021.06.02

댓글