本系列 “Spring Roo 简介” 的 Spring Roo 简介,第 3 部分:开发 Spring Roo 的附加组件 讨论了 Spring Roo 附 加架构,以及如何使用 addon create 命令创建国际化的、简单的附加组件。本文主要关注 Spring Roo 支持的其余两种类 型的附加组件,即高级附加组件和包装器附加组件。建议您在开始阅读本文之前先阅读第 3 部分的文章。
高级附加 组件的简介
高级附加组件允许 Spring Roo 执行简单附加组件所能执行的一切操作,例如,利用依赖关系或插件更 新 Maven POM 文件,更新或添加配置文件,增强现有的 Java 类型,并使用 AspectJ ITD 引入新的 Java 类型。添加源代 码的功能使高级附加组件比所有其他附加组件都更强大。在创建一个 Spring Roo 高级附加组件之前,请先研究一下 Spring Roo 提供的现有高级附加组件。
使用中的高级附加组件
目前使用的一个高级附加组件是 JPA,它能 执行与持久性相关的工作,即为数据库添加支持并创建新的实体。要查看此组件的运行情况,请打开 Roo shell,并在 清 单 1 中执行此命令。在本文中,我使用的是 Spring Roo V1.2.0.M1。
清单 1. JPA 示例
project -- topLevelPackage com.dw.demo --projectName entity-demo jpa setup --database FIREBIRD --provider HIBERNATE entity --class ~.domain.Book
jpa setup 和 entity 命令均等同于一个名叫 org.springframework.roo.addon.jpa 的高级附加组件。Roo shell 上的 jpa setup 和 entity 命令的输出允许明确地对 简单附加组件和高级附加组件进行划分。清单 2 显示了 JPA setup 命令的输出。
清单 2. JPA setup 命令的输出
Created SRC_MAIN_RESOURCES/META-INF/spring/database.properties Updated ROOT/pom.xml [added dependencies ...] Updated SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml Created SRC_MAIN_RESOURCES/META-INF/persistence.xml
jpa setup 命令的输出显示,它正在执行配置功能,比 如,在 pom.xml 中添加依赖关系、更新 Spring applicationContext.xml,以及创建特定于持久性的 persistence.xml 文 件。假设 JPA setup 命令相当于一个简单的附加组件,因为它不创建或更新 Java 源代码。在与上面显示的设置相似的场 景中使用一个简单的附加组件。
清单 3 显示了 entity 命令的输出。
清单 3. entity 命令的输出
Created SRC_MAIN_JAVA/com/dw/demo/domain Created SRC_MAIN_JAVA/com/dw/demo/domain/Book.java Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_Configurable.aj Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_Jpa_Entity.aj Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_Entity.aj Created SRC_MAIN_JAVA/com/dw/demo/domain/Book_Roo_ToString.aj
该输出显示创建了一个名为 Book.java 的 Java 文件以及四个 *.aj 文件。识别高级附加组件的黄金法则是生成 Java 文件和/或 *.aj 文件,如同 entity 命令一样 。这些 *Roo_*.aj 文件被称为类型间声明 (Inter-type Declarations, ITD)。ITD 允许一个类型(一个方面)声明另一个 类型,也就是说,您可以通过添加方法和字段或者更改它们的类型层次来修改任何类型的静态结构。Roo 使用 ITD 作为代 码生成构件,并管理其整个生命周期。ITD 允许 Roo 在单独的编译单元中生成代码,但是无法将他们组合到相同的编译类 中。
查看 entity 命令的输出后,请考虑一下如何通过 Spring Roo 生成这些构件(.java 和.aj 文件)。参见 清 单 4 中的一个 Book.java 文件样例。
清单 4. Book.java 文件
package com.dw.demo.domain; import org.springframework.roo.addon.entity.RooEntity; import org.springframework.roo.addon.javabean.RooJavaBean; import org.springframework.roo.addon.tostring.RooToString; @RooJavaBean @RooToString @RooEntity public class Book { }
除了类中的注释以外,Java 文件看起来很普通。看一下注释和 .aj 文件的名称,显然,一些注释相当于 .aj 文件添加的函数。例如,RooToString 相当于 Book_Roo_ToString.aj 文件并添加了 toString() 方法。RooEntity 相当于 Book_Roo_Entity .aj、Book_Roo_Jpa_Entity 以及与持久性相关的一些方法。我们暂时将其余的内容先放一放。要了解如 何利用注释生成 ITD,请先了解 Spring Roo 如何提供高级附加组件功能。
Roo shell 启动后,会扫描所有的类,并注册所有实现 CommandMarker 接口的类。CommandMarker 接口会告知 Roo,这 些类将定义该附加组件能执行的命令。
所有的这些高级附加组件会向 Spring Roo 提供的 OSGi 运行时注册其服务。这些服务指定了触发代码生成的条件。对 于所有的高级附加组件,触发点就是一个注释。例如,如果 Java 类型拥有 RooToString 注释,则只会触发针对 toString() 方法生成的高级附加组件。这种情况也适用于其他注释。
一旦使用了 entity --class ~.domain.Book,附加组件就会创建一个带注释的名为 Book.java 的 Java 文件。其他的 附加组件会在 Java 类拥有这些注释时或拥有为它们编写的 .aj 文件时触发。
在创建自己的高级附加组件时,您会看见更多的相关说明。
org.springframework.roo.addon.jpa 附加组件只 是 Spring Roo 所提供的高级附加组件的一个示例。其他的高级附加组件还包括 GWT、控制器、JSON 等。Spring Roo 1.2.0 发行版本还包含两个更高级的附加组件,即 addon-equals 和 addon-jsf。addon-equals 附加组件提供了一个实体 的 equals 和 hashcode 方法的实现,addon-jsf 则在 Spring Roo 应用程序中提供 JSF 支持。要玩转最新的 Spring Roo 快照,请构建 Spring Roo 代码或从 Spring Roo 存储库 中 下载每日快照。
在 My Entity Class 中包含 compareTo() 方法
值对象或实体通常是实现 java.lang.Comparable 接口所必需的 ,它们还提供了 compareTo() 方法的实现。Comparable 接口在实现它的每一个类的对象上进行完全排序。当您实现 Comparable 时,可以执行以下操作:
调用 java.util.Collections.sort 和 java.util.Collections.binarySearch
调用 java.util.Arrays.sort 和 java.util.Arrays.binarySearch
将对象用作 java.util.TreeMap 中的键
将对象用作 java.util.TreeSet 中的元素
在本文中,您将构建一个高级的附加组件,该组件将为您在应用程序中创建的实体提 供了 compareTo() 的实现。因为您想在自己的应用程序中添加 Java 代码,所以必须创建一个高级附加组件。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索spring
, 文件
, treeset comparator
, java spring str
, 组件
, 附加组件
, java组件
, spring data jpa
, spring jpa activiti
, spring jpa
, 高级
, spring mvcspring异常jpa
, 一个
附加
spring roo、spring roo project、spring roo boot 区别、spring roo插件、spring roo eclipse,以便于您获取更多的相关知识。