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.

results matching ""

    No results matching ""