1.10.2 meta-annotation 및 composed annotation 사용
Spring이 제공하는 많은 annotation은 여러분의 코드에서 메타 annotation으로 사용할 수 있습니다. 메타 annotation은 다른 annotation에 적용 할 수있는 annotation입니다. 예를 들어, 앞서 언급 한 @Service
annotation은 다음 예제에서 처럼 @Component
와 같이 메타 annotation이 첨부됩니다 .
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
// ....
}
Component
원인은 @Service
가 @Component
와 같은 방법으로 처리 되도록 합니다.
메타 annotation 들을 결합하여 "합성 annotation"을 작성할 수도 있습니다. 예를 들어 Spring MVC 의 @RestController
annotation @Controller
및 @ResponseBody
로 구성된다.

<연수네 프로젝트 예제>



또한 작성된 annotation은 사용자 정의가 가능하도록 선택적으로 메타 annotation의 속성을 재 선언 할 수 있습니다. 이는 메타 annotation 속성의 하위 집합 만 노출하려는 경우 특히 유용 할 수 있습니다. 예를 들어, Spring의 @SessionScope
주석은 범위 이름을 session
에 하드 코딩 하지만 여전히proxyMode
의 사용자 정의를 허용니다. 다음 목록은 SessionScope
annotation의 정의를 보여줍니다 .
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Scope(WebApplicationContext.SCOPE_SESSION)
public @interface SessionScope {
/**
* Alias for {@link Scope#proxyMode}.
* <p>Defaults to {@link ScopedProxyMode#TARGET_CLASS}.
*/
@AliasFor(annotation = Scope.class)
ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS;
}
그런 다음 다음과 같이 proxyMode
선언하지 않고 @SessionScope
를 사용할 수 있습니다.
@Service
@SessionScope
public class SessionScopedService {
// ...
}
다음 예제와 같이 proxyMode
의 값을 override 할 수도 있습니다 .
@Service
@SessionScope(proxyMode = ScopedProxyMode.INTERFACES)
public class SessionScopedUserService implements UserService {
// ...
}
자세한 내용은 Spring Annotation Programming Model 위키 페이지를 참조하십시오.
Last updated
Was this helpful?