on
어노테이션 설정하기
어노테이션 설정하기
728x90
어노테이션의 구성
@Target과 @Retention은 꼭 필수로 입력되어야한다.
@Target 어노테이션의 부착대상을 지정한다. ({ElementType.CONSTRUCTOR : 생성자에 부착해도 된다.
ElementType.METHOD : 메소드에 부착해도 된다.
ElementType.PARAMETER : 매개변수 메소드에 부착해도 된다.
ElementType.FIELD : 클래스의 멤버변수에 부착해도 된다
ElementType.ANNOTATION_TYPE : 다른 어노테이션 타입에 부착해도 된다.
ElementType.TYPE : 클래스, 인터페이스에 부착해도 된다.
}) ({부착대상, 부착대상, 부착대상}) 배열의 형태로도 올 수 있다.
@Retention 어노테이션의 유지되는 시점을 정의한다. RetentionPolicy.RUNTIME 프로그램이 실행될 때 어노테이션이 실행된다. 거의 Runtime이다 RetentionPolicy.Source
소스레벨에서 어노테이션이 사용된다. 컴파일되고는 쓸모없어진다. 문법검사같이 이클립스와 통합개발환경에서 사용이 된다. ex)Override RetentionPolicy.Class 컴파일 된 클래스에서 어노테이션이 사용된다.
어노테이션은 @interface의 형태를 가지고 있다.
예시
@Target(ElementType.PARAMETER)
//메소드 파라미터에 부착하고, 프로그램 실행 시점까지 유지되는 어노테이션이다.
@Retention(RetentionPolicy.RUNTIME)
public @interface SessionUser{
//SessionUserAnnotationProcess.java를 개발해야한다.
//어노테이션의 정보를 활용해서 개발해야한다.
//@SesstionUser어노테이션을 감지하고 적절한 처리를 수행하는 클래스가 개발되어야한다.
}
@RequestMapper("/order.do")
public String order(@SessionUser User user, int productNo){
//그래야 이렇게 사용할 수 있다.
}
어노테이션의 사용방법
@Target({부착대상, 부착대상, 부착대상})
@Retention(보유시점) //1개밖에 못적는다.
public @interface 어노테이션명{ //Controller라고 적었다고 예시하고 아래부분 작성함
String value() default = "";
String[] path() default ={};
//값의 타입 , 속성명(bean에 저장될 때 어떻게 저장되는지 결정), 기본값
}
@Retention(보유시점) //1개밖에 못적는다. public @interface 어노테이션명{ //Controller라고 적었다고 예시하고 아래부분 작성함 //값의 타입 , 속성명(bean에 저장될 때 어떻게 저장되는지 결정), 기본값 } value는 생략, value를 적고 적어도 된다.
@Controller(value="homeController")
@Controller("homeController")
@Controller(value="homeController") @Controller("homeController") @RequestMapping
value = path로 적혀있어서 서로 작성해도 상관없다.
value = path로 적혀있어서 서로 작성해도 상관없다. 그래서 이런 속성값 적는것이 가능한 이유이다.
그래서 이런 속성값 적는것이 가능한 이유이다. 속성명이 하나밖에 없으면 속성명을 생략하고 적을 수 있다. @어노테이션(값)
속성명이 하나밖에 없어도 속성명과 함께 적을 수 있다. @어노테이션(속성명=값)
속성명이 하나밖에 없는 경우 무조건 속성명을 value로 정한다. (생략이 가능하기 때문)
속성값이 배열인 경우 값이 하나밖에 없으면 배열표시를 생략할 수 있다. @어노테이션(path=값)
기본값이 없으면 속성명을 꼭 적어줘야한다.
속성명이 value인 경우 그 속성명을 생략 할 수 있다. 속성명 없이 값만 적는 경우 그 값은 value의 속성의 값으로 간주된다.
속성명이 value인 경우 다른 속성명과 같이 사용될 때는 생략할 수 없다. @어노테이션(value="값", path="값")
속성값이 배열이고, 값이 2개이상인 경우 배열의 리터럴로 작성해야한다. @어노테이션(path={값, 값, 값})
어노테이션의 사용목적
부가적인 정보를 전달하기 위해서 사용한다. 부가적인 정보는 meta data라고 부른다. 어디에 전달할 까? IDE(이클립스, 인텔리제이 등의 개발툴) 과 프레임워크나 라이브러리에게 전달할 목적이다.
프로그램 실행에 필요한 특별한 작업을 수행하게 할 목적으로 사용된다. loombok 이라는 라이브러리가 존재한다. @Getter, @Setter Getter/Setter메소드를 스스로 만든다. @NoArgsConstructor 매개변수 없는 생성자 이렇게 어노테이션으로 특별한 작업을 수행하게 한다.
728x90
from http://lionpower.tistory.com/291 by ccl(A) rewrite - 2021-12-29 20:27:36