首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Apache Wink REST 开发中的高级主题(1)简介

Apache Wink REST 开发中的高级主题(1)简介

注释!在 JAX-RS 中,注释是将传入的 HTTP 请求信息注入 Java™ 方法的主要机制之一。作为一个遵从 JAX-RS 的框架,Apache Wink 根据规范实现需要的注释,但是它还提供了很多非标准的注释,比如 @Asset 注释和 @Scope 注释。               
@Asset 注释@asset 注释是一个标记,将 Java 类标识为资产。资产 是资源方法返回的特殊形式的实体对象。Apache Wink 运行时还可以将资产以参数的形式注入资源方法中。资产是一个数据模型容器对象,为各种内容类型提供转换方法。资产可用于在资源和提供者之间传递信息,有助于减少在 Apache Wink 系统中注册的提供者数量。这一点非常重要,提供者过多会导致 Wink 系统的系统性能降低。                       
演示 @asset 注释的用法。Transaction bean 是一个 Java Architecture for XML Binding (JAXB)                                class.TransactionAsset 类。TransactionAsset 类包装 Transaction                                bean 的一个实例,如下所示。                       
清单 1. TransactionAsset 类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Asset
public class TransactionAsset {
    public Transaction transaction;                        
    public TransactionAsset(Transaction transaction) {
        this.transaction = transaction;
    }
    @Produces("application/xml")
    public Transaction getTransaction() {
        return this.transaction;
    }
    @Consumes("application/xml")
    public void setTransaction(Transaction transaction) {
        this.transaction = transaction;
    }
}




该资产类可作为响应由资源方法返回,也可以参数的形式被传递。Apache Wink 运行时通过调用资产类对应的方法构建实际的响应实体。                       
@Scope 注释根据 JAX-RS 规范,默认情况下,提供者和资源类为每个 JAX-RS 应用程序实例化一次。这种实例化涉及到要调用的类的默认构造函数,随后还要注入依赖关系。                       
在对象的生命周期期间,在将提供者和资源对象中的相应方法作为垃圾回收之前,可对其进行多次调用。Apache Wink 通过 @Scope 注释为提供者和资源提供其他生命周期。  展示了如何使用原型(每个请求)生命周期定义资源。                       
清单 2. @Scope 示例
1
2
3
4
5
@Scope(ScopeType.PROTOTYPE)
@Path("helloworld")
public class HelloWorldResource {
    ...
}




在原型生命周期中,Apache Wink 运行时为每个传入请求实例化一个新的对象。尽管这种行为从内存/性能角度看可能不太理想,但您无需再担心资源和提供者类中的线程和并发问题。                       
@Parent 注释本系列的  详细介绍了 @Path 注释,并指出 JAX-RS 使用它为传入请求定义 URI 匹配模式。通常将其置于 Java 类或方法。                       
@Parent 注释与 @Path 注释有 “紧密” 的联系,它为资源中指定的内容提供基本 URI。如果 Apache Wink 运行时在资源中遇到 @Parent 注释,那么它将尝试计算最终的资源 URI 模板:首先计算包含父资源类 URI 的 @Parent 注释的值,之后尝试连接资源路径 URI 和父资源的 URI。 提供了一个 @Parent 注释的示例。                       
清单 3. @Parent 示例
1
2
3
4
5
6
7
8
9
10
@Path("parentservice")
public class ParentResource {
    ...
}

@Parent(ParentResource.class)
@Path("childservice")
public class ChildResource {
    ...
}




在本例中,有两个资源:ParentResource                                和 ChildResource。ParentResource                                将 @Path 注释定义为                                 parentservice URI。ChildResource                                将 @Path 注释定义为                                 childservice URI。ChildResource                                还使用 @Parent 注释将 ParentResource 定义为父资源。在本例中,Apache                                Wink 运行时将 ChildResource 的最终 URI 变为 parentservice/childservice。
返回列表