Spring框架于2002年末发布,以简化J2EE(现为JavaEE)的开发。 在过去的八年中,Spring通过提供Java社区框架或功能(如易于理解和使用的Spring Security,Spring MVC,事务管理,Spring批处理和Spring集成)成功完成了此任务。 Spring希望使Java开发人员的生活更加轻松和高效。 为了实现这一目标,Spring创建了一个名为Spring Roo的开发工具。
Spring Roo(请参阅参考资料 )是用于Java技术的可扩展的,基于文本的开源RAD工具。 它是用于创建和管理基于Spring的应用程序的强大资源。 这是任务说明:
Roo的使命是从根本上可持续地提高Java开发人员的生产力,而又不损害工程的完整性或灵活性。该任务被转换为基于Java技术的工具,该工具可在项目的整个生命周期中持续提高生产率,并且不会将开发人员锁定在特定的方法上。 Spring Roo使用流行,成熟的成熟库,例如Spring框架,Java Persistence API,Java Server Pages(JSP),Spring Security,Spring Web Flow,Log4J和Maven。 Roo生成的应用程序使用Bean验证(JSR-303)和依赖注入(JSR-330)之类的标准,并遵循SpringSource认证的最佳实践应用程序体系结构。
使用Spring Roo,您只需在Roo shell上键入命令,就可以添加和配置JPA,Spring MVC,Spring Security,使用Log4j进行日志记录,测试框架(如JUnit和Selenium,Solr,JMS,电子邮件)等功能。 使用Roo添加这些功能节省的时间提高了开发人员的工作效率。 Roo无法编写业务逻辑,但可以管理基础结构或应用程序的配置。
Roo是开发时工具,这意味着应用程序在运行时独立于Roo。 由于Roo在运行时不存在,因此它没有任何性能或内存开销。 这样可以确保您不受Spring Roo的束缚,并且可以随时通过几次按键将Roo从项目中删除。
本文讨论使用Roo Shell构建简单的Web应用程序,并演示如何在Windows或Ubuntu计算机上构建Spring Roo源代码。
您可以通过加载Roo shell并使用命令与之交互来管理和配置应用程序。 Roo Shell是一个制表符完成,上下文感知,提示提供的命令Shell。 您可以使用hint命令向Spring Roo询问您的下一个逻辑操作。 Roo足够聪明,可以通过确定应用程序的上下文来建议下一步操作。 例如,假设您已经使用entity命令创建了一个实体。 然后,您键入hint命令。 Roo会告诉您应使用field将字段添加到实体中。 此功能减轻了Roo的概念重量,使其成为出色的学习工具。 您可以按照Roo help和hint命令创建完整的应用程序,而无需参考其文档。
在开始使用Roo之前,请确保已安装以下组件:
Java V6 JDK Apache Maven V2.0.9或更高版本要安装独立的Spring Roo:
您可以下载Roo独立命令行外壳程序,也可以使用内置的Roo SpringSource工具套件(STS)插件。 我建议将两者下载并一起使用,因为STS为基于Spring的应用程序提供了超过Eclipse的许多附加功能。 Spring Roo SpringSource工具套件 将Spring Roo解压缩到您选择的位置。 设置环境变量: 在Windows计算机上,将%ROO_HOME%/ bin添加到路径,其中ROO_HOME是解压缩后的Roo文件的路径。 在* nix机器上,创建指向$ ROO_HOME / bin / roo.sh的符号链接(例如sudo ln -s ~/spring-roo-1.xx/bin/roo.sh /usr/bin/roo )
为了向您展示Roo的强大功能,让我们创建一个简单的企业会议应用程序。 会议应用程序具有两个实体:“发言人”和“谈话”。 一位发言人可以发表一个或多个演讲,而演讲只能由一位演讲者进行。 简单的类图如图1所示。
创建应用程序:
打开您的操作系统命令行外壳。 使用mkdir命令创建一个名为Conference的目录。 进入外壳中的会议目录。 输入roo 。 此命令将启动Roo shell,如清单1所示。现在我们位于Roo Shell中,我们将使用Roo的hint命令来指导我们完成后续步骤。 hint建议使用project创建一个新的基于Maven的Spring project (请参见清单2)。
如hint命令所建议,我们将使用project命令创建一个项目。 此命令具有一个必需的属性topLevelPackage ,用于指定根软件包的名称。 除了必需的属性外,我们还将使用两个可选属性: java (用于指定Java版本)和projectName (用于指定项目的名称)。 输入以下内容:
project --topLevelPackage com.dw.roo.conference --java 6 --projectName conference此命令将创建一个Maven V2管理的基于Spring的项目,如以下输出所示:
Created C:\Users\xebia\demo\conference\pom.xml Created SRC_MAIN_JAVA Created SRC_MAIN_RESOURCES Created SRC_TEST_JAVA Created SRC_TEST_RESOURCES Created SRC_MAIN_WEBAPP Created SRC_MAIN_RESOURCES\META-INF\spring Created SRC_MAIN_RESOURCES\META-INF\spring\applicationContext.xml Created SRC_MAIN_RESOURCES\log4j.properties再次键入hint ,要求Roo进行下一步操作。 这次它建议建立持久性机制。 在外壳上键入persistence setup ,然后按三下Tab键 。 您将获得选项- provider 。 按H 键 ,然后按Tab键以完成“ HIBERNATE”。 在提供程序之后,请按Tab键选择数据库,您将看到许多选项。 因为我们使用Hibernate作为提供程序,所以我们不能选择非关系数据库,例如Google App Engine。 现在,我们将使用HYPERSONIC_IN_MEMORY数据库。
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY还有其他可选属性,例如用户名和密码,我们目前不需要。
现在我们已经建立了持久性机制,我们将再次使用hint命令。 这次我们被告知要使用entity命令创建实体。 Entity用于创建实际的域对象,并具有一个必需的属性class ,用于指定实体的名称。 除了需要--class属性,我们将使用--testAutomatically属性,这对于一个域对象创建集成测试。 我们创建两个实体:Speaker和Talk。
entity --class ~.domain.Speaker –testAutomatically entity --class ~.domain.Talk --testAutomatically我已经使用~作为项目顶级程序包的占位符。
Entity将创建一个灵活的,功能丰富的JPA实体。 创建的实体将具有JPA @Entity,其ID,版本,EntityManager和无参数构造函数。 生成的实体将具有诸如persist,merge,remove,flush,count,find和findById等方法。如果查看此命令的输出,除了创建Java文件(对于演讲者和谈话),还创建了以* Roo _ *。aj结尾的AspectJ文件。 这些* Roo _ *。aj称为“类型间声明(ITD)”,“ Mixins”或“简介”。 Roo使用ITD作为代码生成工件。 ITD允许Roo在单独的编译单元中生成代码,但是ITD在编译时被组合到同一个编译类中。 AspectJ类型间声明用于自动生成ID和版本字段,以及域类中持久性字段的获取器和设置器。
再次使用hint提供了使用field命令将字段添加到实体的建议。 让我们向Speaker实体添加一些字段:
field string --fieldName firstname --class ~.domain.Speaker --notNull field string --fieldName lastname --notNull field string --fieldName email --unique --notNull field string --fieldName organization field date --fieldName birthdate --type java.util.Date --past --notNull field number --type java.lang.Long --fieldName age --min 25 --max 60--class选项使我们可以指定要向其添加字段的类。
field命令可用于指定带有--max和--min等选项的特定于JavaBean验证的注释。它还可用于指定带有--fetch ,-- --column和--unique等。对于日期字段,您还可以指定日期是过去的日期还是将来的日期,如上所用。 使用field ,您不必记住这些注释。
现在让我们向Talk实体添加一些字段:
field string --fieldName title --class ~.domain.Talk --notNull field string --fieldName description --notNull --sizeMax 4000到目前为止,我们已经创建了实体并向其中添加了字段,但是我们尚未指定它们之间的关系。 演讲者和对话之间的关系为ONE_TO_MANY(即,一位演讲者可以进行任意数量的对话)。 这是使用field完成的,如下所示:
field set --fieldName talks --type ~.domain.Talk --class \ ~.domain.Speaker --cardinality ONE_TO_MANY field reference --fieldName speaker --type ~.domain.Speaker \ --class ~.domain.Talk –-notNull现在,我们将要为会议应用搭建一个Web层。 这是使用controller命令完成的。 生成控制器和所有相关Web工件的最便捷方法是使用controller all 。
controller all --package ~.web首次使用controller命令还将为项目添加其他依赖项,例如Spring MVC和Tiles。 由于必须下载所有依赖项(如果您的Maven存储库中不存在这些依赖项),因此可能需要花费一些时间来运行。 此命令还显示了Roo的功能之一:仅在需要时才添加依赖项。
接下来,我们将使用logging命令设置log4j:
logging setup --level INFO --package ALL_SPRING退出Roo shell之前,我们应该做的最后一件事是运行在我们使用entity命令指定--testAutomatically时生成的集成测试。 要从外壳中运行测试,请输入perform tests 。
Roo将调用委托给Maven来运行测试,因此perform tests等同于mvn test命令。 通过键入q退出shell或quit 。
这些命令将创建功能齐全的会议应用程序。 接下来,我们将运行此应用程序。
要运行该应用程序,请键入mvn tomcat:run ,它将启动码头服务器。 打开网络浏览器,然后转到http:// localhost:8080 / conference /。 您将看到图2所示的屏幕。
您可以单击“ 创建新的发言人”来创建会议发言人。 您还可以通过单击列出所有发言人来查看,编辑和删除用户。 同样,您可以创建一个对话,但不能在创建发言人之前。
这是一个简单的应用程序,但是它显示了您可以在几分钟内轻松地从头开始创建一个新的基于Spring的Web应用程序。 在本系列的第二部分中,我将向您展示如何使用不同的Roo功能和附加组件来构建应用程序。
现在,我们已经创建了一个简单的应用程序,我将展示如何在Windows和Ubuntu上构建Spring Roo源代码。
Spring Roo V1.1.0是最新的生产发行版,在V1.1.1发行版下正在进行积极的开发。 出于某些原因,您可能需要从源代码构建Spring Roo:
Spring Roo不提供每夜构建,因此,如果您想要Spring Roo的最新功能,则需要构建Spring Roo的源代码。 您想为Spring Roo项目做任何形式的开发。 您想为Spring Roo编写一个附加组件。 您只想尝试一下Spring Roo代码,看看它是如何实现或编写的。在本节结束之前,您将能够在Windows和* nix系统上成功运行最新的Spring Roo源代码的Maven构建。 您将能够使用最新的Spring Roo,并能够在Eclipse或STS(SpringSource Tool Suite)中导入Spring Roo项目。
在Ubuntu(和其他* nix系统)上构建源代码很容易。 只需遵循以下步骤:
安装Git ,一个分布式源代码控制管理系统。 要将其安装在Ubuntu系统上,请输入sudo apt-get install git-core gitk 。 通过键入git clone git://git.springsource.org/roo/roo.git使用Git签出Spring Roo。 您将在主目录中看到一个roo文件夹,其中包含所有Roo源代码。 GnuPG允许对您的数据和通信进行加密和签名,并具有通用的密钥管理系统和用于各种公钥目录的访问模块。 Roo使用GPG自动签署构建输出。 gpg --list-secret-keys命令gpg --list-secret-keys 。 输出应类似于清单3。与Ubuntu相比,在Windows上构建源代码要困难一些。 跟着这些步骤:
安装Git ,一个分布式源代码控制管理系统。 要开始该过程,您需要在Windows计算机上安装Git。 我在Windows计算机上安装了msysGit 。 如果您已经安装了Git,则可以跳过此步骤。 安装msysGit时,它将询问安装位置。 它将打开命令提示符并开始触发许多命令。 这将持续一分钟左右。 安装之后,您将看到一个清单4所示的屏幕。您现在可以使用Roo的最新开发版本。 打开命令提示符,创建一个名为mkdir roo_dev_demo的新文件夹,然后启动roo-dev命令。 您将看到清单7中所示的屏幕。
您可能需要更新Spring Roo源代码,以便使用最新版本的Spring Roo。 打开命令提示符,然后转到Spring Roo的源代码位置。 触发git pull命令,该命令会将所有远程更改拉入本地克隆,然后执行mvn clean install以构建更新的源。
至此,我们已经构建了一个简单的Web应用程序,甚至没有打开我们的编辑器或引用任何文档。 该应用程序使您可以对实体执行CRUD操作。 我希望您看到Roo为Java开发人员带来了可观的生产力提高。 它使用了大多数开发人员已经知道的成熟且稳定的技术。
在第2部分中 ,我们使我们的应用程序更安全,添加国际化支持,添加消息传递支持(SMTP和JMS)以及自定义应用程序。 我们还将研究Roo的数据库反向工程功能,并将该应用程序转换为功能全面的企业应用程序。
翻译自: https://www.ibm.com/developerworks/java/library/os-springroo1/index.html