Flex blazeds / lcds用于瞬态变量的AMF序列化

时间:2011-09-07 20:47:13

标签: flex serialization blazeds amf transient

我正在使用LCDS和Flex。 当我从java向Flex发送对象时,我不想发送所有属性。据我所知,如果你不想序列化使变量瞬态。

例如。

 private transient Date birthDate;

 public Date getBirthDate(){  
    return birthDate;
 }

 public void setBirthDate(Date val){
    birthDate = val;
    //Some code here.
 }

现在序列化对象不应该有birthDate。但是当我看到AMF日志时,对象的birthDate值就是其中的值 序列化是否会查看代码并检查私有变量是否是瞬态的。(我不明白它是如何访问私有财产的。我很困惑。)
我应该将变量标记为公开吗?然后getter和setter没有任何意义,而且我在setter方法中编写了一些代码。所以我需要制定者。

问题:

  1. 我读了一本书(由Brain Telintelo创建的企业flex,第15章),开箱即用Blazeds只序列化具有匹配的getter和setter的文件。如果是这种情况,那么甚至会把私有财产视为短暂的,甚至是困扰。

  2. 有些正文可以解释一下正常的序列化(不是amf序列化)是如何发生的,并且即使他们有公共的getter和setter,也会跟踪私有的瞬态变量。

  3. 如何在Flex / LCDS / BlazeDS环境中使java变量不进行序列化。

  4. 我在对象中有50-60个变量,4或5个varibales不应该是可序列化的。因此在这么大的对象中编写custion Serializer是一件很大的痛苦。我看到的另一个缺点是,如果我编写自己的序列化程序,hibernate将无法使用此对象。

3 个答案:

答案 0 :(得分:2)

我通常使用Granite Data Services(而不是LCDS或Blaze),但您是否尝试过使用[Transient] ActionScript标签? (当然如果你正在生成你的.as类,这可能是一个问题 - 也许有一个@Transient注释?)

http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_3.html

这种方式取决于谁(什么)正在进行序列化。例如,Granite,与Blaze的行为略有不同。我不认为Granite序列化私有属性(可能会回想起这个错误)。我还记得几年前,我为Granite创建了一个自定义序列化类,告诉它忽略带有'transient'Java关键字的字段(使用反射)。

我不知道你是否可以在Blaze / LCDS中实现自定义序列化逻辑(同样容易),但这也许值得关注。这不是一个巨大的痛苦(正如你所说),因为它只是我定制的一个类,但我再次确定这是简单的花岗岩。

为此可能有一个帮助库或两个。那个家伙写道写这个http://www.flexpasta.com/index.php/2008/05/19/blazeds-with-annotations-for-remote-objects/似乎在做你正在反复询问的 。 (没有setter时强制序列化。)

答案 1 :(得分:1)

如果要将一个Java属性排除在序列化为Flex之外,请点击以下相同问题的帖子:https://stackoverflow.com/a/22328869/244911

答案 2 :(得分:0)

将[Transient]置于getter上就足够了,将它放在setter上是冗余和冗余的,并且会在编译器警告中出现。