第 53 章 注解继承

摘要

子类和实施注释接口的类可以继承 JAX-RS 注释。继承机制允许子类和实施类覆盖从其父级继承的注解。

概述

继承是 Java 中更强大的机制之一,因为它允许开发人员创建可以专门满足特殊需求的通用对象。JAX-RS 允许将类与资源映射时使用的注释从超级类继承来保持此能力。

JAX-RS 的注释继承也扩展为支持接口。实施类继承其所实施的接口上使用的 JAX-RS 注释。

JAX-RS 继承规则提供了一种机制来覆盖继承的注释。但是,无法从从超级类或接口继承的构造中完全删除 JAX-RS 注释。

继承规则

资源类从其实现的接口继承任何 JAX-RS 注释。资源类也从其扩展的任何超级类继承任何 JAX-RS 注释。从超级类继承的注解优先于从 am 接口继承的注解。

例 53.1 “注解继承” 中显示的代码示例中,Kad jin 类的 getMonster() 方法继承了 Kai ju 接口的 @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 “覆盖注解继承” 中显示的代码示例中,Kadjin 类的 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)
  {
    ...
  }
  ...
}