- 浏览: 367340 次
- 性别:
- 来自: 阿里巴巴
文章分类
- 全部博客 (207)
- Maven (5)
- Cassandra (2)
- Hadoop (3)
- LDAP (2)
- SOA (7)
- 认证、加密、安全 (6)
- 搜索引擎相关技术 (3)
- REST (7)
- 数据库 (11)
- Java 基础相关 (38)
- UML (1)
- Java NIO 框架 (3)
- javassist (1)
- Bean容器 (4)
- 网络编程 (1)
- NoSQL (4)
- XML、Json (1)
- JS (2)
- Google (6)
- Warp-MVC (2)
- 持久层 (2)
- sitebricks (1)
- MVC (6)
- CSS (2)
- JPA (2)
- RDBMS (5)
- cache (4)
- tomcat (1)
- 其它 (3)
- eclipse (1)
- bigpipe (1)
- RDBMS MySQL (1)
- MySQL (2)
- ant (1)
- 前端 (2)
- Groovy (1)
- linux (3)
- Scala (1)
- zookeeper (1)
- redis (2)
- 测试 (1)
- 监控 (1)
- mac (3)
- 区块链 (3)
- 工具 (1)
最新评论
-
masuweng:
好好好,辛苦了!!
Spring Data JPA 简单介绍 -
masuweng:
Spring Data JPA 简单介绍 -
zhangjianxinjava:
您好,大神本人小白一个最近在研究不知道可否 通过邮箱进行交流, ...
JAVA Metrics度量工具 - Metrics Core -
xzs603:
http://zhengdl126.iteye.com/blo ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
JavaStart:
运行mysql2redis 的install.sh 文件为何提 ...
mysql到redis的复制
项目地址: http://code.google.com/p/jrest4guice/
Demo演示: http://www.rest4g.org/full
http://www.javaeye.com/topic/201103 一个Java的Restful服务框架,支持JPA、JAAS、分布式资源对象 项目地址:http://code.google.com/p/jrest4guice/ 一个轻量级的基于Google Guice的Restful服务框架,支持JPA、JAAS、分布式资源对象,对OSGI的支持也在计划中. (Demo演示: http://cnoss.vicp.net/ ) 请大家直接从SVN中获取JRest4Guice工程即可 svn checkout http://jrest4guice.googlecode.com/svn/trunk/ jrest4guice-read-only (使用Maven)
当前版本:0.9.0 preview
特点:
- 基于Google guice
- 零配置,服务的自动扫描注册
- 非侵入式,用户不需要实现特定的接口来实现Restful服务,只需要通过@RESTful来声明
- 支持Post. Get. Put. Delete操作
- 支持对Get操作的缓存机制,实现动态资源静态化(通过@Cache标注声明)
- 灵活的注入(支持上下文环境request/response/session以及参数的自动注入)
- 根据客户端要求返回不同类型的数据(xml/json/html)
- 通过@PageFlow实现对MVC module2的支持,输出结果支持CTE、Velocity、Freemarker和Spry模板引擎(当返回类型是text/html时才有效)
- 支持JPA,通过增强的BaseEntityManager实现实体的CRUD
- 支持事务,通过@Transactional注解声明事务的类型
- 支持JAAS,通过@RolesAllowed注解声明操作所需要的角色
- 支持Hibernate validator
- 支持拦截器 (interceptor)
- 支持分布式资源对象,实现业务逻辑的分布式部署
- 提供了与Struts2集成的插件
下一步计划:
- OSGI的支持
- 分布式事务的支持
代码示例:
- //=======================================================
- //资源类
- //=======================================================
- /**
- * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
- * 联系人的资源对象
- * 声明remoteable为真(可以通过@RemoteReference的注入到任一资源对象,通常用在跨应用的资源调用上)
- */
- @RESTful(name = "ContactResource", remoteable = true)
- @Path( { "/contact", "/contacts/{contactId}" })
- public class ContactResource {
- @Inject
- private ContactService service;//注入联系人管理的服务对象
- /**
- * 创建新的联系人
- * PageFlow :当服务端返回类型是Text/Html类型时,重定向用户的请求到指定的页面,实现最基本功能的MVC。
- * 在这里,指明当操作成功时,重定向到/contacts,当操作失败时,将用户请求重定向到/contact。
- * @param contact 联系人实体
- */
- @Post
- @PageFlow(success = @PageInfo(value = "/contacts",type=ResultType.REDIRECT)
- ,error=@PageInfo(value="/contact",type=ResultType.REDIRECT))
- public String createContact(@ModelBean Contact contact) {
- return this.service.createContact(contact);
- }
- /**
- * 修改联系人信息
- * @param contact 联系人实体
- */
- @Put
- @PageFlow(success = @PageInfo(value = "/contacts",type=ResultType.REDIRECT)
- ,error=@PageInfo(value="/contact",type=ResultType.REDIRECT))
- public void putContact(@ModelBean Contact contact) {
- this.service.updateContact(contact);
- }
- /**
- * 显示联系人列表
- * @param page 页码
- * @param size 每页记录数
- */
- @Get
- @Path("/contacts")
- @PageFlow(success = @PageInfo(value = "/template/contacts.ctl"))
- public Page<Contact> listContacts(int page, int size) {
- return this.service.listContacts(page, size);
- }
- /**
- * 显示单个联系人的信息
- * @param contactId 联系对象ID
- */
- @Get
- @PageFlow(success = @PageInfo(value = "/template/contactDetail.ctl"))
- public Contact getContact(@Parameter("contactId") String contactId) {
- if(contactId == null)
- return new Contact();
- return this.service.findContactById(contactId);
- }
- /**
- * 删除指定ID的联系人
- * @param contactId 联系对象ID
- */
- @Delete
- @PageFlow(success = @PageInfo(value = "/contacts",type=ResultType.REDIRECT))
- public void deleteContact(@Parameter("contactId") String contactId) {
- this.service.deleteContact(contactId);
- }
- }
- //=======================================================
- //业务类
- //=======================================================
- /**
- *
- * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
- *
- */
- @Transactional//事务支持,缺省为TransactionalType.REQUIRED,可以在方法中覆写
- @Interceptors({//自定义的拦截器(类级别的,作用于所有的方法,可以在方法中覆写)
- @Interceptor(TestInterceptor.class),
- @Interceptor(LogInterceptor.class)
- })
- public class ContactService{
- //注入实体管理器
- @Inject
- private BaseEntityManager<String, Contact> entityManager;
- public String createContact(Contact contact) {
- if (contact == null)
- throw new RuntimeException("联系人的内容不能为空");
- if (this.entityManager.loadByNamedQuery("byName", contact.getName()) != null) {
- throw new RuntimeException("联系人的姓名相同,请重新输入");
- }
- this.entityManager.create(contact);
- return contact.getId();
- }
- public void deleteContact(String contactId) {
- String[] ids = contactId.split(",");
- Contact contact;
- for (String id : ids) {
- contact = this.findContactById(id);
- if (contact == null)
- throw new RuntimeException("联系人不存在");
- this.entityManager.delete(contact);
- }
- }
- @Transactional(type=TransactionalType.READOLNY)
- public Contact findContactById(String contactId) {
- return this.entityManager.load(contactId);
- }
- @Transactional(type=TransactionalType.READOLNY)//覆盖类级别的事务类型为只读
- @Interceptor(ListContactsInterceptor.class)//覆盖类级别的拦截器
- public Page<Contact> listContacts(int pageIndex, int pageSize)
- throws RuntimeException {
- return this.entityManager.pageByNamedQuery("list",
- new Pagination(pageIndex, pageSize));
- }
- public void updateContact(Contact contact) {
- if (contact == null)
- throw new RuntimeException("联系人的内容不能为空");
- Contact tmpContact = this.entityManager.loadByNamedQuery("byName", contact.getName());
- if(tmpContact != null && !contact.getId().equals(tmpContact.getId()))
- throw new RuntimeException("联系人的姓名相同,请重新输入");
- this.entityManager.update(contact);
- }
- }
- //=======================================================
- //远程调用的案例
- //=======================================================
- /**
- *
- * @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
- *
- */
- @Path( { "/testCallRemote"})
- public class TestRemoteResource {
- @Inject
- @RemoteReference//注入远程资源对象
- private ContactResource service;
- @Get
- public Page<Contact> listContacts(int page, int size) {
- return this.service.listContacts(page, size);
- }
- }
请大家直接从SVN中获取JRest4Guice、JRest4Guice-sample、libraries三个工程即可
http://jrest4guice.googlecode.com/files/JRest4Guice-0.8.1_Jpa4Guice-0.1-with-example.zip
http://jrest4guice.googlecode.com/files/JRest4Guice-0.8.1-with-example.zip
http://jrest4guice.googlecode.com/files/JRest4Guice.rar
http://jrest4guice.googlecode.com/svn/trunk/
发表评论
-
分布式服务的Trace——Google Dapper & Twitter Zipkin
2014-08-15 14:47 3637对于分布式在线服务,一个请求需要经过系统中多个模块,上百台机 ... -
REST
2011-12-28 17:21 1138Rest初探 一种思维方式 ... -
google sitebricks 学习心得--最简单web应用
2011-09-25 21:21 1416简介 Sitebricks 目前仍然处于测试阶段,它是一种新的 ... -
warp-mvc
2011-09-24 21:35 1088转载自:http://www.iteye.co ... -
Warp framework - 一个相当有前途的Java轻量级Web开发框架
2011-09-24 21:12 1436Warp framework 是最近刚刚 ... -
用Restlet创建面向资源的服务
2011-09-22 22:17 1241http://www.infoq.com/cn/art ... -
Guice开发实战
2011-08-21 13:12 1718本文转载地址:http://www.easyjf.com/ht ... -
更简单,更强大的JAX-WS
2011-04-07 22:31 1422JAX-WS2.0的来历------------------- ... -
使用 Apache Wink、Eclipse 和 Maven 开发 RESTful Web 服务
2010-12-16 16:05 1801http://www.ibm.com/developerwor ... -
Java REST框架一览
2010-08-29 21:05 1094目前宣称支持REST的Java ... -
利用Restlet开发的研究--Restlet的背景
2010-08-22 22:16 14321.1、Servlet的问题 1)没有对协议与应用之间的关系 ...
相关推荐
14. **JRest4Guice**:推荐了一个轻量级的Java RESTful服务框架,结合Guice实现更简洁的服务构建。 15. **Cobra:Java HTML解析器**:Cobra可能是当时一个新的Java库,用于解析HTML文档,对于Web开发和数据抓取很有...
14. **JRest4Guice**:这是一个轻量级的Java REST框架,与Google Guice集成,简化了RESTful服务的开发。 15. **Cobra:Java HTML解析器**:Cobra是用于解析HTML的Java库,对于处理网页内容和爬虫开发具有实用性。 ...
guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar guice.jar
4. **Guice的优势**: - **轻量级**:相比Spring等其他IoC容器,Guice更小巧,引入的依赖少,启动速度快。 - **简洁的API**:Guice的API设计简单易用,减少了代码量,降低了学习曲线。 - **强大的注解支持**:...
4. **灵活性**:Guice允许在运行时动态地配置依赖关系。 5. **强大的社区支持**:由于其开源特性,Guice拥有一个活跃的社区,提供了丰富的资源和支持。 #### 三、示例解析 在给定的部分内容中,首先介绍了一个简单...
4. **Annotations**: Guice 使用注解(如 @Inject、@Singleton 等)来标记需要注入的依赖,以及对象的生命周期。 **Guice 的使用步骤** 1. **创建 Module**: 编写自定义的 Module 类,声明所需的绑定。 2. **创建 ...
4. **Injector实例化**: 在应用启动时,我们创建Injector实例,并传入所需的Module。之后,可以通过Injector来获取已绑定的依赖对象。 ```java Injector injector = Guice.createInjector(new HelloWorldModule());...
赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:guice-4.0.pom; 包含翻译后的API文档:guice-4.0-javadoc-API文档-中文(简体)版...
4. **提供者(Providers)**:Guice允许我们使用`Provider`接口来自定义对象的创建过程,这在某些需要特殊初始化或生命周期管理的情况下非常有用。 5. **注解处理(Annotation Processing)**:Guice使用Java的注解处理...
4. **注解驱动**:Guice使用Java的注解(如`@Inject`、`@Singleton`等)来标记和配置依赖。`@Inject`用于声明依赖,`@Singleton`表示单例模式,确保一个类型在整个应用程序中只有一个实例。 5. **测试**:在Guice中...
4. **提供者(Providers)**:当需要更复杂的实例化逻辑时,可以使用`Provider`接口自定义对象的创建过程。`@Inject`注解的`Provider`方法可以在需要时动态创建对象。 5. **类型监听器(Type Listeners)**:Guice...
EXTJS4、Guice与MyBatis是三个在IT领域中重要的技术,它们分别用于构建用户界面、依赖注入以及数据库操作。这篇文档将详细介绍这些技术及其在实际项目中的应用。 EXTJS4是一款强大的JavaScript框架,专门用于构建富...
4. **生命周期管理**:Guice支持多种对象生命周期策略,如单例(`@Singleton`)、原型(每次请求创建新实例)等。 5. **提供者(Provider)**:对于有特殊初始化需求或需要延迟创建的对象,可以通过自定义`Provider...
### Google Guice: 敏捷轻量级依赖注入框架详解 #### 一、引言与背景 在现代软件开发中,依赖注入(Dependency Injection, DI)已成为构建灵活、可维护和可测试应用程序的重要手段之一。Google Guice作为一款100%...
"google Guice 1.0 用户指南 中文" Guice 是一个超轻量级的、下一代的、为 Java 5 及后续版本设计的依赖注入容器。它可以帮助 Java 企业应用开发社区解决连接对象方面的问题,例如 Web 应用如何访问中间层服务、...
### Apache Shiro 与 Guice 集成详解 #### 概述 在现代软件开发过程中,集成不同的框架和技术是常见的需求。Apache Shiro 是一个强大的、易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能。而 Google ...
【标题】"nfsdb-guice-1.0.2.zip" 提供的是一个集成NFSDB(Network File System Database)与Guice框架的版本为1.0.2的开源项目。NFSDB通常是一种分布式、高性能的键值存储系统,而Guice则是Google开发的一款轻量级...
4. **创建 MyBatis-Guice 注释**:在需要使用 MyBatis 功能的类上添加 `@InjectMapper` 或 `@InjectSqlSession` 注释,让 Guice 自动注入对应的 Mapper 或 SqlSession。 5. **启动 Guice**:在应用入口,使用 Guice...
Acai 是 JUnit4 和 Guice 的测试库,可以更容易的编写应用功能测试。主要特性:注入测试需要的助手类启动测试需要的任意的服务 运行测试之间的服务清理按照正确顺序启动多个服务 创建测试作用域绑定Acai 主要针对的...