第 53 章 注解继承
摘要
JAX-RS 注释可以通过子类和实施注释接口的类来继承。继承机制允许子类和实施类覆盖从其父级继承的注解。
概述
继承是 Java 中更强大的机制之一,因为它允许开发人员创建能够满足特定需求的通用对象。JAX-RS 通过允许将类映射到来自超级类的资源使用的注解来保留此电源。
JAX-RS 的注解继承也扩展为支持接口。实施类继承其实施接口中使用的 JAX-RS 注释。
JAX-RS 继承规则提供了覆盖继承注解的机制。但是,无法从超级类或接口继承的构造中完全删除 JAX-RS 注解。
继承规则
资源类从它实施的接口继承任何 JAX-RS 注释。资源类也会从扩展的任何超级类继承任何 JAX-RS 注解。从超级类继承的注解优先于从 符号继承的注解。
在 例 53.1 “注解继承” 中显示的代码示例中,Kaijin
类的 getMonster ()
方法继承了 Kaiju 接口的 @Path
、@GET
和 @PathParam
注解。
例 53.1. 注解继承
public interface Kaiju { @GET @Path("/{id}") public Monster getMonster(@PathParam("id") int id); ... } @Path("/kaijin") public class Kaijin implements Kaiju { public Monster getMonster(int id) { ... } ... }
覆盖继承的注解
覆盖继承的注解就像提供新注解一样容易。如果子类或实施类为方法提供自己的 JAX-RS 注释,则忽略该方法的所有 JAX-RS 注释。
在 例 53.2 “覆盖注解继承” 中显示的代码示例中,Kaijin
类的 getMonster ()
方法不会从 Kaiju 接口继承任何注解。实施类覆盖 @Produces
注释,它会导致从接口中的所有注解被忽略。
例 53.2. 覆盖注解继承
public interface Kaiju { @GET @Path("/{id}") @Produces("text/xml"); public Monster getMonster(@PathParam("id") int id); ... } @Path("/kaijin") public class Kaijin implements Kaiju { @GET @Path("/{id}") @Produces("application/octect-stream"); public Monster getMonster(@PathParam("id") int id) { ... } ... }