Java

Java Annotation 만들기

최고다최코딩 2023. 9. 13. 20:26
728x90

 

Annotation 을 생성한다.

 

Annotation은 Interface형식이다

public @interface MyAnnotation {

String value() default "http://www.naver.com";

}

내부에는 어노테이션에서 받을 속성값을 적을 수 있는데 

기존 클래스 형식으로 적지 않는다.

String value() default "http://www.naver.com";

입력받을 값의 타입 속성명() 

default값을 설정할 수도 있다. 

 

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

@Documented

@Inherited

public @interface LoginCheck{

 

@Inherited

 

클래스 상속 관계에서 어노테이션을 상속받을 수 있는지 여부

이 어노테이션이 적용되면 하위클래스에서 상속된다.

 

@Documented

 

JavaDoc 문에서 문서화할 때 Annotation을 포함시킨다.

 

@Target

 

어노테이션을 어떤 요소에 적용할 것인지 지정

ex) 메소드로 지정되었으므로 메소드에만 적용가능하다

 

@Retention

 

어노테이션을 언제까지 유지할 것인지 지정

 

SOURCE: 컴파일 시점까지만 유지, 런타임시 정보 사용 불가

->컴파일러를 위한 정보나 코드 생성 도구에 사용

 

CLASS(default): 컴파일 ~ 런타임까지 유지, 런타임시 리플렉션(reflection)을 통해 어노테이션 정보를 얻을 수 없다. 

 

RUNTIME: 컴파일 ~ 런타임까지 유지, 리플렉션을 통해 어노테이션 정보를 얻을 수 있다. 

->런타임 동작에 영향을 주는 메타 데이터를 제공하는데 유용

 

@LoginCheck

@GetMapping("/user_logout_action")

public String user_logout_action(HttpSession session) {

session.removeAttribute("sUserId");

session.invalidate();

return "redirect:user_main";

}

@LoginCheck을 메소드에 적용하였다.