使用Roo提升Java开发效率

工程 | Ben Alex | 2009年5月1日 | ...

更新: “介绍Spring Roo”博客系列的第二部分现已上线,其中包含详细的分步教程,帮助您开始使用Roo。第三部分详细介绍了Roo的内部架构。

本周,推特圈一直在热议来自SpringOne Europe的新闻。一个引起广泛关注的公告是SpringSource的新开源生产力工具,代号为“Roo”。

Roo是一个复杂的往返代码生成器,它使创建和改进Spring应用程序比您想象的更快更容易。即使您对代码生成有所保留,也值得一看Roo。它包含显著的创新,解决了对代码生成的所有主要异议,同时仍然交付最佳实践的Spring应用程序并在整个应用程序生命周期中保持实用性。

这是本系列的第一个博客,我将讨论Roo,首先介绍其总体设计目标和功能,然后讨论如何使用它以及Roo工程内部结构。鉴于这篇博客是作为介绍,让我们首先重复指导Roo开发的使命宣言。

Roo的使命是在不影响工程完整性和灵活性的前提下,从根本上和可持续地提高Java开发人员的生产力。

这如何转化为一个工具?一位看到Roo的会议代表将其描述为“一个坐在后台的小精灵,处理我不希望担心的问题”。这种描述特别恰当,原因有两个。首先,Roo确实很“小”。它当前的下载大小不到3兆字节,它允许您继续使用基于Spring的普通Java编程模型,并且它不需要您采用特殊的Roo运行时或构建技术。其次,它确实安静地坐在后台并为您处理事情。最重要的是,Roo不会妨碍您。如果您想自己编写一些内容,只需这样做,Roo将安静地自动调整相应的相关文件(即Roo支持往返)。如果您想编辑Java或JSP文件,只需编辑即可。Roo不需要您使用其界面。或者,如果您想停止使用Roo,只需退出程序即可。Roo不会成为您构建系统或运行时的一部分,因此停止使用Roo非常容易,即使您不太可能想要这样做。

我们相信Roo填补了现有IDE的强大功能、现代Web RAD框架所展示的生产力潜力以及Java开发人员渴望拥有一个以他们想要的方式工作并反映他们重视的工程原则的工具之间的非常合适的空间。这导致了一个非侵入式后台工具,它非常易于学习使用,可以应用于现有项目和新项目,并以极高的速度简化世界最佳实践应用程序的开发。

生产力和可用性

当您拥有易于学习并基于您现有知识、技能和经验的高度易用的工具时,提高生产力和享受开发就更容易了。因此,在设计Roo时,可用性对我们来说是一个关键的设计因素。我们受到开发人员通过类似于*nix shell提示符的选项卡自动完成用户界面所获得的明显生产力优势的影响。但是我们更进一步,专门为Roo编写了一个shell。通过交付一个shell(而不是GUI或命令行实用程序),我们能够实现一个可脚本化、用户友好、易于学习、容错的界面。如有疑问,您可以随时按TAB键,Roo将完成命令。您可以在需要时键入“hint”,并接收项目阶段特定的指导。您可以从命令中省略选项,Roo将根据您最近的操作自动推断您的意思。您可以键入非法命令,Roo将仔细撤消失败命令可能做出的任何更改。您可以编写脚本并回放它以再次生成您的项目。您甚至不需要完全键入命令——只需键入足够的内容以便Roo将其识别为唯一的命令即可。您可以在不安装IDE的情况下,通过操作系统命令提示符执行所有这些操作。

当然,大多数Java开发人员使用IDE,并发现它们对他们的生产力非常宝贵。因此,Roo认识到这一点,并在您在IDE中处理项目时愉快地继续执行。您不需要任何Roo特定的IDE插件(尽管我们确实有一个用于SpringSource Tool Suite的插件,我将在下面进一步讨论)。当然,在您的IDE中,您会发现Roo旨在通过代码辅助和调试支持简化您的Java开发生活。您的调试器将像往常一样运行,逐步执行构成应用程序所有代码的部分——包括Roo帮助您的那些文件。Roo生成的每个源文件都将正确显示在代码辅助(control + space)列表中,因此您无需记住方法签名。

由于Roo支持您使用Java编程,您将收到正常的增量验证,这有助于我们所有人识别缺失的括号或错字的字段名。IDE重构工具将继续为您服务,让您相信即使面对大型开发团队、团队成员变更以及多年的持续开发和维护,应用程序代码质量仍然很高。最后,所有Roo注释目前都采用“Roo*”的命名约定。此命名约定确保您可以在需要时轻松找到注释——并不是说您实际上根本不需要键入任何Roo特定的注释。注释本身为您提供了对Roo如何帮助您开发的非常细致的控制,允许您控制成员名称和自定义行为(如果您愿意)(默认设置也很好用)。

在SpringSource Europe,我们还演示了在SpringSource Tool Suite (STS)(我们流行且即将免费提供的基于Eclipse的IDE)中使用Roo的情况。这允许您在IDE中享受Roo的所有好处。您可以在屏幕底部的“Roo视图”中输入命令,并立即看到更改反映在您的包资源管理器和编辑器中。或者,您可以在编辑器中进行更改,并立即看到Roo视图显示Roo对您的更改的响应。它就像一个坐在您旁边的小精灵,处理您不想处理的事情。

技术功能

Roo构建于一个附加组件架构之上,该架构使能够构建不同类型的Java应用程序。目前大约有18个“附加组件”,它们旨在支持轻松开发具有单独基于JPA的实体层的请求-响应MVC Web应用程序。Roo当前包含的一些特定功能:

  • 从空目录开始一个新应用程序(Roo也可以与现有应用程序一起使用,尽管如此)
  • 配置您的构建系统并设置特定于该构建系统的项目结构(我们最初支持Maven 2)
  • 安装您选择的JPA提供程序和数据库
  • 查看和配置数据库配置详细信息
  • 设置Log4J配置文件,并允许使用TAB完成命令进行修改
  • 创建享受自动依赖注入和持久化方法的JPA实体
  • 向JPA实体添加字段,包括自动为JPA以及新的Bean验证(JSR 303)标准设置正确的注释
  • 管理自动JUnit集成测试,即使您在实体之间存在关系并应用Bean验证约束,这些测试也能立即通过
  • 创建和维护基于Spring MVC的控制器,这些控制器严格遵循REST约定,包括为这些控制器生成和维护JSP页面
  • 创建您可以自己完成的Spring MVC控制器存根,从而无需查找此类控制器中使用的最常见注释、约定和方法签名
  • 动态地在实体上创建查找器,因此您可以生成典型的“findByField1LikeOrField2Between(Field1 like, Field2 from, Field2 to)”样式查询,而无需编写JPA查询语言
  • 轻松安装和配置Spring Security(只需键入“security setup”并按Enter键)

所有这些功能都基于Roo的内部元数据模型,该模型是项目的一个全面表示。因此,虽然像IDE这样的技术提供成员结构模型,但Roo通过提供反映常见开发约定的企业应用程序特定元数据将其提升到更高的抽象级别。例如,虽然IDE可能知道有一个名为“Foo”的类,其中有一个名为“persist”的方法定义了某些参数和返回类型,但Roo也具有此信息,以及一系列附加元数据,例如该方法从逻辑角度的含义。

由于元数据模型,我们将在后续版本中添加到Roo的功能将远远超出请求-响应Web应用程序开发。通过此元数据模型实现的可能性非常广泛,例如,包括第四代Web应用程序(基于组件的、客户端执行的技术)的往返管理、往返UML集成、替代持久化模型(例如针对云计算进行了优化)和往返富客户端。

参与其中!

欢迎您参与Roo。虽然我们已经发布了Roo alpha版本,但这只是一个非常早期的预览版本。我们目前也在进行投票,以便社区可以提供有关名称的反馈。恰如其分的是,投票应用程序是在SpringOne Europe的主旨演讲期间现场开发的,并部署到云端。您可以在http://www.springsource.org/roo找到这些资源的链接。

正如博客开头提到的,我还会在接下来的几周内发布更多博客,详细介绍Roo 的使用方法,以及内部架构和附加组件的编写方式。在此期间,您可以通过Twitter上的#roo标签关注我们的工作。

我们希望您喜欢使用Roo。

获取Spring新闻通讯

随时关注Spring新闻通讯

订阅

领先一步

VMware提供培训和认证,以加快您的进度。

了解更多

获取支持

Tanzu Spring在一个简单的订阅中提供对OpenJDK™、Spring和Apache Tomcat®的支持和二进制文件。

了解更多

即将举行的活动

查看Spring社区所有即将举行的活动。

查看全部