`

Restlet实战(十)结合源代码分析Restlet-Spring配置文件

    博客分类:
  • REST
 
阅读更多

Restlet实战(四)与Spring集成给出了Restlet如何与Spring进行集成。下面就结合Restlet的源码分析一下Spring配置文件。

 

在Spring的配置文件中,我们能看到这样的代码:

 

Java代码  收藏代码
  1. <entry key="/customers">  
  2.     <bean class="org.restlet.ext.spring.SpringFinder">  
  3.         <lookup-method name="createResource" bean="customersResource" />  
  4.     </bean>  
  5. </entry>  

 

 

从配置上很容易看出SpringFinder有一个方法:createResource,作用就是实例化在Spring中定义的Resource。看源码中的crateResource方法:

 

Java代码  收藏代码
  1. public Resource createResource() {  
  2.     Resource result = null;  
  3.   
  4.     if (getTargetClass() != null) {  
  5.         try {  
  6.             // Invoke the default constructor  
  7.             result = (Resource) getTargetClass().newInstance();  
  8.         } catch (Exception e) {  
  9.             getLogger()  
  10.                     .log(  
  11.                             Level.WARNING,  
  12.                             "Exception while instantiating the target resource.",  
  13.                             e);  
  14.         }  
  15.     }  
  16.   
  17.     return result;  
  18. }  

 

代码如此简单,就不用多做解释了。

 

接下来,我们看一下另外的一个配置项:

 

Xml代码  收藏代码
  1. <bean id="restRoute" class="org.restlet.ext.spring.SpringRouter">  
  2.     <property name="attachments">  
  3.         <map>  
  4.             <entry key="/customers">  
  5.                 <bean class="org.restlet.ext.spring.SpringFinder">  
  6.                     <lookup-method name="createResource" bean="customersResource" />  
  7.                 </bean>  
  8.             </entry>  
  9.             <entry key="/customers/{customerId}">  
  10.                 <bean class="org.restlet.ext.spring.SpringFinder">  
  11.                     <lookup-method name="createResource" bean="customerResource" />  
  12.                 </bean>  
  13.             </entry>  
  14.         </map>  
  15.     </property>  
  16. </bean>  

 

是的,接下去就要分析SpringRouter,从上面的配置能看到此类有一个attachments的属性,那么跟这个属性有关的方法就是setAttachments了

 

Java代码  收藏代码
  1. public static void setAttachments(Router router, Map<String, Object> routes) {  
  2.     Object value;  
  3.     Class resourceClass;  
  4.   
  5.     try {  
  6.         for (final String key : routes.keySet()) {  
  7.             value = routes.get(key);  
  8.   
  9.                 if (value instanceof Restlet) {  
  10.                         router.attach(key, (Restlet) value);  
  11.                 } else if (value instanceof Class) {  
  12.                         router.attach(key, (Class<? extends Resource>) value);  
  13.                 } else if (value instanceof String) {  
  14.                         resourceClass = Engine.loadClass((String) value);  
  15.       
  16.                         if (Resource.class.isAssignableFrom(resourceClass)) {  
  17.                             router.attach(key, resourceClass);  
  18.                         } else {  
  19.                             router .getLogger() .warning(  
  20.                                     "Unknown class found in the mappings. Only subclasses of org.restlet.resource.Resource are allowed.");  
  21.                         }  
  22.                 } else {  
  23.                         router.getLogger().warning(  
  24.                                 "Unknown object found in the mappings. Only instances of Restlet and subclasses of org.restlet.resource.Resource are allowed.");  
  25.                 }  
  26.             }  
  27.     } catch (ClassNotFoundException e) {  
  28.             router.getLogger().log(Level.WARNING,  
  29.             "Unable to set the router mappings", e);  
  30.     }  
  31. }  

 

 上述代码首先从一个循环开始,从Map里面取出需要的元素。key就上上面配置中的URL了,例如:/customers,/customers/{customerId},而value就是我们配置的相应的bean,程序里首先会check得到的value是不是Restlet的实例,如果是,就把这个value attach到router上,如果不是,则检查这个value是一个class还是一个String类型的字符串。如果是class,则认为这个class必定是一个Resource,直接attach到router;如果是String类型的字符串,则首先会认为是一个指定Resource的字符串,实例化,并attach到router,否则记录警告的日志信息。

 

 看到这里,不知各位是否有想法,当时我看的时候,对第二、三个判断倒是很清晰,无非是把Resource直接attach到Router上,而对于第一个判断,按照上述代码所写,只要是Restlet的实例貌似就可以,换句话说,是不是我定义一个Application也可以作为一个元素配置上去?

 

限于篇幅的长度以及可读性,下篇给出相关的测试。

分享到:
评论

相关推荐

    camel-restlet-spring-web-app

    标题 "camel-restlet-spring-web-app" 暗示了一个基于Apache Camel、Restlet和Spring Web的应用程序示例,该示例使用Jetty作为嵌入式服务器。这个项目结合了这些技术来创建一个RESTful API服务。让我们深入探讨每个...

    restlet2.0版本jee源代码

    了解了这些基本概念后,你可以通过解压"restlet-jee-2.0.14"压缩包,查看源代码、例子和API文档,更深入地学习Restlet 2.0如何在Java EE环境中实现REST服务。这将有助于你开发出高效、灵活且易于维护的Web应用程序。

    Restlet与Spring 集成

    Restlet与Spring集成是将Restlet框架与Spring框架结合,以增强RESTful服务的开发能力。Restlet是一个轻量级的Java框架,专门用于构建REST(Representational State Transfer)架构风格的应用程序。它遵循JAX-RS...

    Restlet2 + Spring3 注解方式配置

    2. **applicationContext-restlet.xml配置**:在这个文件中,我们将配置Spring的BeanNameUrlHandlerMapping,它会将URL映射到Spring的Bean。此外,还需要配置Restlet的相关组件,例如Application和Protocol。 ```...

    chromecj.com-Restlet-Client-REST-API-Testing_v2.8.0.1.rar

    在“chromecj.com-Restlet-Client-REST-API-Testing_v2.8.0.1.rar”压缩包中,包含的是Restlet Client的扩展文件“chromecj.com-Restlet-Client-REST-API-Testing_v2.8.0.1.crx”。 Restful API是现代Web服务的...

    restlet-client-rest-api-t.crx

    restlet-client 谷歌插件 接口调试 最新

    nexus-restlet1x-plugin-2.6.1-01.zip

    标题 "nexus-restlet1x-plugin-2.6.1-01.zip" 提供的信息表明,这是一个与 Nexus 服务器相关的插件,具体是 Restlet 1.x 版本的插件,版本号为 2.6.1-01。Nexus 是一个流行的 Maven 和 Nexus Repository Manager 的...

    基于Spring的Restlet实例

    9. **部署和运行**:最后,将构建好的Spring Restlet应用打包成WAR文件,部署到Tomcat、Jetty等Servlet容器,或者使用Spring Boot的嵌入式服务器直接运行。 通过这个基于Spring的Restlet实例,开发者可以学习到如何...

    Restlet-Client-REST-API-Testing_v2.8.0.1

    Restlet Client是一款强大的REST API测试工具,尤其在与Chrome浏览器结合使用时,它能为开发者提供便捷的API接口测试和调试功能。此版本为v2.8.0.1,表明这是一个更新到一定稳定性的软件,可能包含了之前版本的改进...

    chromecj.com-Restlet-Client-REST-API-Testing_v2.8.0.1.zip

    "chromecj.com-Restlet-Client-REST-API-Testing_v2.8.0.1.crx" 文件是 Chrome 插件的安装包,通常需要将此文件拖放到 Chrome 浏览器的扩展页面(chrome://extensions/)来安装。由于这是一个 zip 压缩包,用户需要...

    Restlet实战(二十六)事务 (Transaction)

    本文将深入探讨RESTful服务中的事务处理,并以《Restlet实战(二十六)事务 (Transaction)》为例进行解析。 首先,我们要理解RESTful服务中的核心原则之一是无状态(Stateless)。这意味着每个客户端请求都包含处理...

    restlet2.1学习笔记项目代码

    本项目是针对Restlet 2.1版本的学习笔记,包含了实际的项目代码,旨在帮助开发者更好地理解和应用Restlet框架。 在Restlet 2.1中,有几个关键概念和组件值得深入探讨: 1. **组件(Component)**:Restlet框架的...

    restlet-j2ee-2.0.15.rar

    这个压缩包可能包含了该版本的源代码、JAR文件、文档、示例以及相关的配置文件,供开发者在J2EE环境下集成和使用。 描述中提到,Restlet是对 HttpClient 的一个简单封装。HttpClient是Apache基金会的一个开源项目,...

    restlet-jee-2.0.3

    Restlet是一个开源框架,专为构建RESTful Web服务和应用程序设计。REST(Representational State Transfer)是一种轻量级的架构风格,广泛应用于Web服务和API的设计,强调资源的表示和状态转移。Restlet JEE 2.0.3是...

    RESTlet-jee-2.0.9自用.rar

    "restlet-jee-2.0.9.zip"是RESTlet-jee-2.0.9的源代码或者库文件,可能包含了所需的jar包、文档和其他资源,用于在项目中直接引用或进行二次开发。 总的来说,RESTlet-jee-2.0.9自用.rar这个压缩包是一个关于使用...

    restlet源代码

    restlet源代码,描述了restlet框架中每个类的具体实现

    restlet-jse

    在压缩包文件"restlet-jse"中,可能包含了Restlet-JSE的库文件、示例代码、文档或者配置文件。这些内容可以帮助初学者快速上手,通过实例了解如何在项目中引入和使用Restlet-JSE框架。开发者可以通过解压文件,运行...

    Web Api调试工具 Chrome插件Restlet-Client-REST-API-Testing

    3. **历史记录**:Restlet Client会保存所有发送的请求,方便开发者回顾和复用之前的请求配置。 4. **自动化测试**:用户可以创建测试套件,将多个请求组织成测试集,自动化执行测试,节省重复工作的时间。 5. **...

    org.restlet.ext.spring.jar

    org.restlet.ext.spring.jar

    Atlas2.3.0依赖: org.restlet/sqoop-1.4.6.2.3.99.0-195

    这个依赖包含了三个关键的JAR文件:`sqoop-1.4.6.2.3.99.0-195.jar`,`org.restlet-2.4.3.jar`以及`org.restlet.ext.servlet-2.4.3.jar`。下面我们将详细探讨这三个组件及其在IT领域的应用。 首先,让我们来看一下`...

Global site tag (gtag.js) - Google Analytics