2011-09-07 69 views
1

我正在使用LCDS和Flex。 當我從java發送一個對象到Flex時,我不想發送所有的屬性。據我所知,如果你不想序列化一個變量瞬變。Flex blazeds/lcd AMF序列化用於瞬態變量

例如。

private transient Date birthDate; 

public Date getBirthDate(){ 
    return birthDate; 
} 

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

現在序列化的對象不應該有birthDate。但是,當我看到AMF日誌時,該對象具有帶有值的birthDate。
序列化是否會查看代碼並檢查私有變量是否是瞬態的(我不明白它是如何訪問私有屬性的,我有點困惑)
我應該將變量標記爲public。然後getter和setter是沒有意義的,而且我用setter方法編寫了一些代碼。所以我需要二傳手。

問題:

  1. 我在一本書(企業柔性與腦Telintelo,第15章BlazeDS的),其開箱的BlazeDS的只序列具有匹配的getter和setter的Fileds閱讀。如果情況如此,那麼布澤茲甚至會麻煩地將私人財產視爲暫時的。

  2. 可一些身體請解釋正常serializtion(不AMF serializtion)是如何發生的,並跟蹤私人瞬態變量,即使他們有公共getter和setter方法。

  3. 如何在Flex/LCDS/BlazeDS環境中使java變量不能序列化。

我在對象中有50-60個變量,4或5個varibales不應該被調用。所以在如此大的對象中寫入custion Serializer是一件很痛苦的事情。我看到的另一個缺點是,如果我編寫自己的序列化程序,hibernate將無法使用此對象。

回答

2

我通常使用花崗岩數據服務(而不是LCDS或Blaze),但是您是否嘗試過使用[Transient] ActionScript標記? (當然,如果你生成你的。至於類,這可能是一個問題 - 也許有一個@Transient批註?)

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

這種工作方式取決於誰(什麼)做的系列化。例如,我認爲Granite的行爲與Blaze的行爲略有不同。我不認爲花崗岩序列化私人屬性(可能是回憶這個錯誤)。我也回想起幾年前,我爲Granite創建了一個自定義序列化類,它告訴它忽略具有'transient'Java關鍵字的字段(使用反射)。

我不知道你是否可以在Blaze/LCDS中實現自定義序列化邏輯(同樣容易),但這可能也是值得研究的東西。這不是一個巨大的痛苦(就像你說的那樣),因爲它只是我定製的一個班級,但我只知道這是簡單的花崗岩。

這裏可能有一個幫手lib或兩個。這傢伙寫道這個http://www.flexpasta.com/index.php/2008/05/19/blazeds-with-annotations-for-remote-objects/似乎在做你在問反向。 (在沒有setter的情況下強制序列化)

+1

是的,在LCDS/BlazeDS的自定義序列化是可能的,而且很容易。我正準備發佈相同的FlexPasta示例(您打敗了我)。 –

0

把[瞬態]放​​在getter上就足夠了,把它放在setter上是冗餘和冗餘的,並且會在編譯器警告中出現。

如果你想被序列化到的Flex排除一個Java屬性