返回介绍

9.1 Roo 简介

发布于 2025-04-22 19:57:20 字数 1609 浏览 0 评论 0 收藏

Roo 的魔力体现在结合 AspectJ 并通过代码生成的方式为领域和 Web 类注入行为。使用 Roo 工程的时候,工程文件被 Roo 所监控并生成额外的制件(artifact)。你还会有可编辑的常规 Java 类,但是它们会自动提供一些额外的特性。如果使用 Roo 创建类并为这个类添加一个或多个提供额外功能的注解,那么 Roo 会生成对应的 AspectJ 文件,这个文件中包含了一个或多个的 AspectJ 类型间声明(Inter Type Declarations,ITD)。例如,@RooJavaBean 注解会触发 AspectJ 方面声明的生成,这个声明提供了在 Java 类中引入 getter 和 setter 的 ITD。这样就不再需要自己编码了。现在快速地看一个例子,了解这是如何使用的,示例 9-1 展示了一个简单的 Bean 类:

示例 9-1 简单的 Java Bean 的类:Address.java

P141

P142a

可以看到,我们并没有编写 getter 和 setter 方法。它们会由提供支持的 AspectJ 方面文件引入进来,因为在这里我们使用了 @RooJavaBean 注解。生成的 AspectJ 方面文件如示例 9-2 所示。

示例 9-2 所生成的 AspectJ 方面定义:Address_Roo_JavaBean.aj

P142b

可以看到,这里定义为一个有权限的切面,也就是可以访问目标类中所声明的私有变量。定义 ITD 的方式就是在方法名之前添加上目标类的名字,中间用点号分割。所以 public String Address.getStreet() 将会为 Address 引入一个方法签名为 public String getStreet() 的新方法。

Roo 遵循了一个特定的命名模式,这样很容易识别它生成了什么文件。要使用 Roo,可以使用命令行 Shell 也可以直接编辑源文件。Roo 会同步和维护源文件,并在必要的时候进行文件生成。

当使用 Roo 创建工程的时候,它会生成一个 pom.xml 文件,当使用 Maven 构建工程的时候会用到这个文件。在这个 pom.xml 文件中,有 Maven 的编译器并定义了一个 AspectJ 的插件。这意味着所有的 AspectJ 方面是在编译期织入进来的。实际上,在构建生成的 Java 类文件中并没有保留任何 Roo 相关的东西。因此没有运行时的依赖。另外,Roo 的注解只会保留在源码级别,所以它们不会成为类文件的一部分。实际上,如果愿意的话,可以很容易地去除掉 Roo。可以将 AspectJ 文件中所定义的所有代码放到对应的源文件中并将这些 AspectJ 文件移除。这称为 推进式重构 (push-in refactoring),这样的话,得到的是一个纯 Java 的解决方案,就像所有的事情都是从头开始自己编写的。应用依然会保留所有的功能。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。