当前位置: 首页 > 知识库问答 >
问题:

Spring Roo DataOnDemand和getNewTransientObject方法的定制?

冯开诚
2023-03-14

在我们对Spring Roo托管实体的联调中,我们遇到了一个问题,即使用AsheJ混合样式html" target="_blank">接口,该接口不仅引入了具有默认实现的方法,而且还添加了一个用JSR 303验证规则注释的属性。问题是Spring Roo DataOnDemand逻辑没有看到这些字段,因此在getNewTranentObject()方法中没有考虑到它们。

例如,以下(简单的)接口为实现“Keyed”接口的每个实体添加了一个“key”字段:

import javax.persistence.Column;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public interface Keyed {

    public String getKey();

    public void setKey(String key);

    /**
     * AspectJ MixIn for any class which implements the interface. Provides a
     * default implementation using AspectJ. This is the style shown in
     * Manning's AspectJ in Action (2nd edition) for providing a default
     * implementation interface.
     * 
     * @author tgh
     */
    static aspect Impl {

        @NotNull
        @Column(name = "key", unique = true)
        @Size(min = 8, max = 12)
        private String Keyed.key;

        public void Keyed.setKey(String key) {
            this.key = key;
        }

        public String Keyed.getKey() {
            return this.key;
        }
    }
}


对我们来说,这实际上是一个已解决的问题。我们所做的是从Spring Roo创建的AspectJ ITD(.aj)文件中推入getNewTransientObject()方法,然后确保属性设置为可接受的值。在我们的DataOnDemand中。对于测试类的java文件,我们有以下片段

public KeyedExampleA getNewTransientKeyedExampleA(int index) {
    KeyedExampleA obj = new KeyedExampleA();
    setDescription(obj, index);
    setListPrice(obj, index);
    setName(obj, index);

    // Deal with mix-in variables that Roo doesn't know about
    obj.setKey("KEY_" + index);

    return obj;
}

以上让我感到不舒服的是,我们没有在DataOnDemand.java文件中创建setKey(obj, index)方法,并且使用与Spring Roo为getNewTranentKeyedObject(int)方法生成的样式相同的样式。

为这样一个微不足道的案例创建setKey(obj, index)方法是否值得费心,或者我们应该只做我们必须做的事情obj.set在getNewTranentObject()方法中的Key(value)?

从查看Spring Roo创建的. aj文件,我看不出它有多大区别,因为除了getNewTranentObject()方法之外,没有任何调用setField(obj, index)的东西。既然Spring Roo没有发现我们已经引入了混合属性,它将来可能也不会在乎。

共有1个答案

颜安宁
2023-03-14

为了保持一致性,我会编写setKey()方法。但不这样做不会造成任何问题。

 类似资料:
  • 在 Python 中,我们可以经常看到以双下划线 __ 包裹起来的方法,比如最常见的 __init__,这些方法被称为魔法方法(magic method)或特殊方法(special method)。简单地说,这些方法可以给 Python 的类提供特殊功能,方便我们定制一个类,比如 __init__ 方法可以对实例属性进行初始化。 完整的特殊方法列表可在这里查看,本文介绍部分常用的特殊方法: __n

  • 是否有可能静态解析被覆盖的方法? 调用虚拟绑定和动态绑定之间是什么关系?所有调用的虚拟方法都是动态绑定的吗? 这里x.display显示调用虚拟?这是什么意思?这意味着它是动态绑定的吗?

  • 本文向大家介绍JavaScript定义类和对象的方法,包括了JavaScript定义类和对象的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript定义类和对象的方法。分享给大家供大家参考。具体方法如下: 在JS中,类和对象有多种不同的写法,因为本人对JS也不怎么熟,所以就本人的理解来写,如果哪位朋友发现有不对,请告之,共同学习. JS定义一个类有两种定法(我只知道这两种

  • Spring MVC也提供了构造指定控制器方法链接的机制。以下面代码为例子,假设我们有这样一个控制器: @Controller @RequestMapping("/hotels/{hotel}") public class BookingController { @RequestMapping("/bookings/{booking}") public String getBoo

  • 问题内容: 我之所以问这个问题,是因为对该答案的评论主题进行了讨论。我有90%的方法可以解决问题。 存在三种不同形式: 绑定方法 , 未绑定方法 和 函数 对象之间的区别是什么,所有这些都由f1描述?一个人怎么称呼这三个物体?它们如何相互转化?关于这些东西的文档很难理解。 问题答案: 一个 功能 是创建由声明,或通过。在Python 2下,当函数出现在语句主体中(或传递给类构造调用)时,它将转换为

  • 我是第一次尝试我的手在Firebase,我遇到了一个问题。只有在getter方法符合变量名或者成员变量是公共的情况下,才能从Firebase存储/数据库中获取数据。但是我对成员变量的命名约定是,并且我在getter方法名称中没有使用“m”。现在我有多个问题: 公开模型成员变量是可行的选择还是错误的做法?这里最好的命名方法是什么?我应该将getter方法命名为,还是应该将“m”排除在成员变量名之外?