6.1.1 元注解
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组成。
此外,组合注解可以随意地从元注解重新声明属性来允许用户进行定制。当您只想暴露元注解属性的子集时,这可能特别有用。 例如,以下是自定义@Scope注解,它将作用域名称硬编码为session,但仍允许proxyMode的自定义。
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Scope("session") public @interface SessionScope { ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT; } 然后可以使用@SessionScope而不声明proxyMode,如下所示: @Service @SessionScope public class SessionScopedUserService implements UserService { // ... }
或者对于proxyMode使用重写值,如下所示:
@Service @SessionScope(proxyMode = ScopedProxyMode.TARGET_CLASS) public class SessionScopedService { // ... }
有关更多详细信息,请参阅Spring注解编程模型。