3.10.2 Meta-annotations 元注解
Spring提供的许多注解可以在你自己的代码中用作元注解。 元注解即一种可用于别的注解之上简单的注解。 例如,上面提到的@Service
注解@Component
的元注解:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component // Spring will see this and treat @Service in the same way as @Component
public @interface Service {
// ....
}
元注解也可以组合创建组合注解。 例如,来自Spring MVC的@RestController
注解是@Controller
和@ResponseBody
的组成的。
此外,组合注解也可以重新定义来自元注解的属性。这在只想暴露元注解的部分属性值的时候非常有用。 例如,Spring的@SessionScope
注解将它的作用域硬编码为session
,但仍允许自定义proxyMode
。
@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
@SessionScope
public class SessionScopedService {
// ...
}
或者重写proxyMode的值,如下所示:
@Service
@SessionScope(proxyMode = ScopedProxyMode.INTERFACES)
public class SessionScopedUserService implements UserService {
// ...
}
有关详细信息,请参阅Spring Annotation Programming Model.