如何编写 Spring Roo 的高级附加组件和包装器附加组件

本系列 “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,以便于您获取更多的相关知识。

时间: 2025-01-02 15:03:43

如何编写 Spring Roo 的高级附加组件和包装器附加组件的相关文章

Spring 事务管理高级应用难点剖析: 第 3 部分

本文是"Spring 事务管理高级应用难点剖析" 系列文章的第 3 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括在使用 Spring JDBC 时如果直接获取 Connection,哪些情况会造成数据连接的泄漏与如何应对,以及除 Spring JDBC 外,其它数据访问技术数据连接泄漏的应对方案.   概述 对于应用开发者来说,数据连接泄漏无疑是一个可怕的梦魇.如果存在数据连接泄漏问题,应用程序将因数据连接资源的耗尽而崩溃,甚至还可能引起数据库的

mybatis 高级映射和spring整合之高级映射(4)

mybatis 高级映射和spring整合之高级映射 ----------------学习结构-------------------- 0.0 对订单商品数据模型进行分析 1.0 高级映射 1.1 一对一查询 1.2 一对多查询 1.3 多对多查询 1.4 resultMap总结 1.5 延迟加载 2.0 查询缓存 2.1 一级缓存 2.2 二级缓存(了解mybatis二级缓存使用场景) 3.0 mybatis和spring整合(掌握) 4.0 逆向工程(会用) ----------------

Spring 事务管理高级应用难点剖析: 第 2 部分

本文是"Spring 事务管理高级应用难点剖析" 系列文章的第 2 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括混合使用多种数据访问技术(如 Spring JDBC + Hibernate)的事务管理问题,以及通过 Spring AOP 增强的 Bean 存在的一些比较特殊的情况. 联合军种作战的混乱 Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋.像 Hibernate 是非常优秀的 ORM 实现方案,但对底层

第一个ASP组件:设置服务器日期时间组件

服务器 网络之门 在进入我们需习的第一个组件之前,小虎首先得说明一下,由于小虎的水平有限,可能在下面的这些说明过程中存在不少错误,希望大家提出指证,在这里我希望能与大家分享一下ASP的学习经验,小虎的这个网站推耸的是原创精神,很多东西都是DIY,因此程序编写过程中也会染上小虎本身不良的编程习惯.而且整个教学网站也只有小虎一个维护,因此技术上肯定存在不少问题,望大家谅解. ASP组件为我们的ASP编程提供了强大的扩展功能,比如我们需要在服务器中启动一个应用程序,设置服务器的时间,访问操作系统内部信

.NET中使用APlayer组件自制播放器

原文:.NET中使用APlayer组件自制播放器 目录 说明 APlayer介绍 APlayer具备功能 APlayer使用 自制播放器Demo 未完成工作 源码下载   说明 由于需求原因,需要在项目中(桌面程序)集成一个在线播放视频的功能.大概要具备"流式"边下载边播放的能力.自带的media player不太好看又不让改动,网上找了很多开源的播放器,效果也都不佳(可能还没碰到比较好的).后来找到了迅雷公司的APlayer播放引擎(其实就是一个ActiveX控件),感觉官网上的介绍

对COM(组件对象模型)的理解及组件和的优点可能遇到的问题

用户需要什么样的软件产品?这是一个多选题,但高效,健壮是肯定会被选种的.作为一名软件开发人员如何做才能满足用户的需要呢?必须要保证升级应用时 不破坏与以前版本的向后兼容性.必须做到扩展系统服务时不依赖特定的操作系统.面向对象的程序设计显然是一次革命性的改变.采用面向对象的设计方法我们可 以很容易的把要解决的问题事物抽象成各种类,并将内部动作封装隐藏起来,只提供一些接口.但这并没有完全解决我们的问题.昨天我在<程序员>杂志上看到, 现在是后OO时代,那OO以后是什么呢?应该是面向组件吧. COM

走近Flex组件系列(五):数据组件(Dataehoose,DateFiled)与文本组件

走近Flex组件系列(五):数据组件(Dataehoose,DateFiled)与文本组件(Label,Text) Flex中的日期组件Dataehoose很简单,其功能就是提供一个直观的日期选择界面,比较常用且需要记住的就是他的change事件. 1 <mx:DateChooser x="263" y="19" showToday="true" 2 change="displayDate(DateChooser(event.ta

走近Flex组件系列(四):分组组件(Box)、分割组件(DividedBox)和容器组件

走近Flex组件系列(四):分组组件(Box).分割组件(DividedBox)和容器组件(Panel) 本文主要介绍Flex的Box,DividedBox和Panel组件的应用. 一.分组组件(Box) Flex中Box组件分两种,即VBox和HBox,也就是水平分组布局和垂直分组布局.下面对这两中分别进行介绍. Flex的VBox组件可以自动的帮助开发人员在界面布局的时候进行水平分组,所谓的分组也就是他会自动将放置在其内部的其他组件进行水平布局放置,如下mxml代码: 1 <mx:HBox

界面-有没有人知道情侣空间中的掉红心型图片的实现方法,是组件吗?还是其他组件的组合??

问题描述 有没有人知道情侣空间中的掉红心型图片的实现方法,是组件吗?还是其他组件的组合?? 安卓中,实现在显示界面中掉小图形心形图形的方法,有没有人知道情侣空间中的掉心的实现方法,怎么破???是组件吗?还是其他组件的组合?? 解决方案 随机贴图,然后移动坐标,加上一点随机 解决方案二: api demo中就有类似的功能 解决方案三: 就是自定义动画... 解决方案四: 就是一个自定义的动画... 解决方案五: 就是一个自定义的动画... 解决方案六: 就是一个自定义的动画... 解决方案七: 就