JAvaキーワードtransient
Transientはjavaのキーワードで、このドメインが永続化されないことを示します.すなわち,1つのオブジェクトが永続化されると,transientキーワードで修飾される変数は永続化されたコンテンツに含まれない.
適用する場合:
私达が2つのシステムがドッキングする时、もしシステムAがシステムBに1つの持続化の対象Oを提供するならば、対象Oの中でいくつかの重要なプライバシーの情报を含んで、私达はBシステムに提供したくありません!この時点でこのドメインにキーワードtransientを付けることができます.
次に、tranisentキーワードを永続化するかどうかの違いを見てみましょう.
ネットワーク・ユーザーのオブジェクト(NetUser)がある場合は、永続化後にネットワークを介して別のシステムに転送します.NetUserにとって、彼のuNameとuPwdは重要なプライバシー情報です.他のシステムに提供したくありません.
次に、uNameとuPwdにtransientキーワードを追加します.
逆シーケンス化後、uNameとuPwdの両方がnullであることがわかります.
適用する場合:
私达が2つのシステムがドッキングする时、もしシステムAがシステムBに1つの持続化の対象Oを提供するならば、対象Oの中でいくつかの重要なプライバシーの情报を含んで、私达はBシステムに提供したくありません!この時点でこのドメインにキーワードtransientを付けることができます.
次に、tranisentキーワードを永続化するかどうかの違いを見てみましょう.
ネットワーク・ユーザーのオブジェクト(NetUser)がある場合は、永続化後にネットワークを介して別のシステムに転送します.NetUserにとって、彼のuNameとuPwdは重要なプライバシー情報です.他のシステムに提供したくありません.
class NetUser implements Serializable{
private int uId;
private String uName;
private String uNickName;
private String uPwd;
NetUser() {
}
NetUser(int uId, String uPwd, String uNickName, String uName) {
this.uId = uId;
this.uPwd = uPwd;
this.uNickName = uNickName;
this.uName = uName;
}
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getuPwd() {
return uPwd;
}
public void setuPwd(String uPwd) {
this.uPwd = uPwd;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getuNickName() {
return uNickName;
}
public void setuNickName(String uNickName) {
this.uNickName = uNickName;
}
}
public static void main(String[] args) {
NetUser user = new NetUser(1, "polkm", " ", "xpcomrade");
ObjectOutputStream oos = null;
try {
//
oos = new ObjectOutputStream(new FileOutputStream(new File("D://netuser.out")));
oos.writeObject(user);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (oos != null) oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
ObjectInputStream ois = null;
try {
//
ois = new ObjectInputStream(new FileInputStream(new File("D://netuser.out")));
NetUser u = (NetUser) ois.readObject();
System.out.printf("uId:%s
", u.getuId());
System.out.printf("uName:%s
", u.getuName());
System.out.printf("uNickName:%s
", u.getuNickName());
System.out.printf("uPwd:%s
", u.getuPwd());
} catch (Exception e) {
} finally {
try {
if (ois != null ) ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上記のコードを実行すると、コンソールに次の情報が表示されます.uId:1
uName:xpcomrade
uNickName:
uPwd:polkm
次に、uNameとuPwdにtransientキーワードを追加します.
class NetUser implements Serializable{
private int uId;
private transient String uName;
private String uNickName;
private transient String uPwd;
NetUser() {
}
NetUser(int uId, String uPwd, String uNickName, String uName) {
this.uId = uId;
this.uPwd = uPwd;
this.uNickName = uNickName;
this.uName = uName;
}
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getuPwd() {
return uPwd;
}
public void setuPwd(String uPwd) {
this.uPwd = uPwd;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getuNickName() {
return uNickName;
}
public void setuNickName(String uNickName) {
this.uNickName = uNickName;
}
}
結果を見てみましょう.uId:1
uName:null
uNickName:
uPwd:null
逆シーケンス化後、uNameとuPwdの両方がnullであることがわかります.