Meta 注解、Composed 注解 这个元注解的定义:不是特别的清除,在后面的文章中提到过:它只是提供元数据的注解,这样的注解就可以叫做元注解
Spring 提供的许多注解都可以在你自己的代码中作为元注解使用。元注解是一个可以应用于另一个注解的注解。例如,前面提到的 @Service注解是用 @Component进行元注解的,如下例所示:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Component // 这里使用了 @Component,@Service 与 @Component 的处理方式相同。public @interface Service {// ...}
你也可以结合元注解来创建 「组合注解」。例如,Spring MVC 的 @RestController注解是由@Controller和 @ResponseBody组成。
此外,组成的注解可以选择性地重新声明来自元注解的属性以允许定制。当你想只暴露元注解的一个子集的属性时,这可能特别有用。例如,Spring 的 @SessionScope注解将作用域名称硬编码为 session,但仍然允许自定义 proxyMode。下面的列表显示了 SessionScope 注解的定义。
@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;}
然后,您可以使用 @SessionScope,而不必声明 proxyMode 如下所示:
@Service@SessionScopepublic class SessionScopedService {// ...}
你也可以覆盖 proxyMode 的值,如下面的例子所示:
@Service@SessionScope(proxyMode = ScopedProxyMode.INTERFACES)public class SessionScopedUserService implements UserService {// ...}
有关详细信息,请参阅 Spring Annotation Programming Model wiki 页面。
