play-framework的PropertiesEnhancer:不会调用自定义getter / setter

时间:2015-05-19 00:06:54

标签: java properties playframework getter-setter playframework-2.3

我正在使用play-framework 2.3.9 for java并且遇到play的属性增强问题:

play documentation中所述,play使用字节码增强功能自动为公共字段创建getter和setter。此功能也应该支持编写我自己的访问器:

  

当然,您可以自己定义getter和setter方法。如果存在方法,Play将使用现有的访问者。

然而,我的自定义getter / setter将不会被调用!

这是带有自定义设置器的模型的播放文档中的示例:

public class Product {

    public String name;
    public Integer price;

    public void setPrice(Integer price) {
        if (price < 0) {
            throw new IllegalArgumentException("Price can’t be negative!");
        }
        this.price = price;
    }
}

在另一个课程中,我为price - 属性设置了负值:

Product myProduct = new Product();
myProduct.price = -20;

通过正确的播放增强功能,这应该会自动调用自定义setter并抛出异常。 但不会抛出异常!

我的第一个想法是,默认情况下可能会禁用播放增强功能,因为这也是discussed latley by the play developers。所以我看了一个带有反编译器的.class文件,并注意到,只要没有自编写访问器,所有getter / setter都是创建并正确调用。所以显然启用了播放增强功能。

我发现它有点奇怪,任何高于play-1.2的版本都不存在关于此主题的游戏文档。游戏开发者是否有可能忘记维护此功能?

我创建了一个git-hub repository,其中包含我上面提到的播放文档中的确切代码示例,您可以在其中重现该错误。

我什么都遗失了? 我该怎么做,以便调用我的自定义访问器代码而不必显式调用getter / setter-methods?

0 个答案:

没有答案
相关问题