Javaのtransient
修飾子の前のprivate
キーワードの使用に関連する問題があります。
変数宣言:
transient private ResourceBundle pageResourceBundle;
私のクラスは次のようになります:
public class LoginViewModel extends AbstractViewModel {
transient private ResourceBundle pageResourceBundle;
@AfterCompose
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {
initializeLoginValues();
boolean timeout = BooleanUtils.toBoolean(getHttpServletRequest().getParameter("timeout"));
if (timeout) {
Messagebox.show(pageResourceBundle.getText("MSG_SESSION_HAS_EXPIRED_PLEASE_LOGIN"), pageResourceBundle.getText("LABEL_ALERT"),
Messagebox.OK, Messagebox.ERROR);
}
view.getPage().setTitle(CsdcLicence.get().getApplicationName());
}
質問があります。
1.プライベート変数の前にtransient
キーワードを使用するのはなぜですか?
2.このキーワードを使用する目的は何ですか?
一時変数がJavaでシリアル化されることはありません。
メンバー変数がバイトストリームに永続化されるときにシリアル化されないようにマークします。オブジェクトがネットワークを介して転送されるとき、オブジェクトは「シリアル化」される必要があります。シリアル化は、オブジェクトの状態をシリアルバイトに変換します。これらのバイトはネットワークを介して送信され、オブジェクトはそれらのバイトから再作成されます。 Java transientキーワードでマークされたメンバー変数は転送されず、意図的に失われます。
serialization とは何かをご覧ください。また、参照 this
例
public class Foo implements Serializable
{
private String saveMe;
private transient String dontSaveMe;
private transient String password;
//...
}
上記の例では、dontSaveMe
&password
はtransient variables
として宣言されているため、シリアル化されません。
そして短い使用-ケース:
公開されているWebサービスを介してユーザー-オブジェクトを公開することを想像してください。ニックネーム、オンライン-州、場合によってはメールや場所などとして公開したいと思います。ユーザーがログインに使用するパスワードを明らかにしたくないはずです。このパスワードはユーザーオブジェクトのプロパティである可能性がありますが、シリアル化しないでください。オブジェクトをJSONにシリアル化する場合-上記のWebサービスの文字列。
transient
キーワードは、オブジェクトが シリアル化しないでください、 持続しない。重いオブジェクト(たとえば、Wrapper
sなど、大量のビジネスロジックを含む可能性がある)をシリアル化したくない場合に使用できます。
@Transient
アノテーションは、オブジェクトが 永続化すべきではない (たとえば、Hibernateを使用していた場合)が、 シリアライズ可能。
2つに混乱したことを覚えているので、注釈の説明を含めました。 :-)
transient
は、保存されないオブジェクトのプロパティまたはserialisedを指定するために使用されます。たとえば、オブジェクトをファイルに保存する場合、transient
は、そのオブジェクトがファイルに保存されるときにそのファイルに保存されないプロパティまたは属性を指定します。
オブジェクトがファイルから再作成されるとき、そのtransient
属性(またはプライベートプロパティ)の値は、保存されていないか、そのファイルにシリアル化されていないため、再作成されません。場合によっては、これらのプライベートインスタンス変数またはオブジェクトの属性の一部を永続化したくない場合があります。transient
を使用すると、それを実行できます。