Bean Object Persistence

MyBean Source:

package com.uc.beantest;

import java.io.Serializable;

public class MyBean implements Serializable {
	
	private static final long serialVersionUID = 7681972609642495682L;
	
	private String name;
	private int age;
	private transient String info;
	public static String cinfo;
	
	public MyBean() {
		super();
		// TODO Auto-generated constructor stub
	}

	
	public MyBean(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	
	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}


	public String getInfo() {
		return info;
	}


	public void setInfo(String info) {
		this.info = info;
	}


	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("MyBean [name=");
		builder.append(name);
		builder.append(", age=");
		builder.append(age);
		builder.append(", info=");
		builder.append(info);
		builder.append("]");
		builder.append("cinfo = " + cinfo);
		return builder.toString();
	}
	
	
}

利用ObjectOutput實現Bean Object Persistence:

//save
ObjectOutput os = new ObjectOutputStream(
		new BufferedOutputStream(
		new FileOutputStream("user.ser")));
MyBean user = new MyBean("uc", 25);
user.setInfo("transient field");
MyBean.cinfo = "static field";
//被static transient 修飾的字段不會被序列化
os.writeObject(user);
os.close();

//load
ObjectInput is = new ObjectInputStream(
		new BufferedInputStream(
		new FileInputStream("user.ser")));
MyBean user = (MyBean)is.readObject();
is.close();
System.out.println(user);

利用XMLEncoder, XMLDecoder實現Bean Object Persistence:

//save
MyBean user = new MyBean("uc", 25);
		user.setInfo("transient field");
		MyBean.cinfo = "static field";
XMLEncoder encoder = new XMLEncoder(
		     new BufferedOutputStream(
		         new FileOutputStream("Beanarchive.xml")));
//static 修飾的字段不會被序列化
encoder.writeObject(user);
encoder.close(); 

//load
XMLDecoder decoder = new XMLDecoder(
			 new BufferedInputStream(
			    new FileInputStream("Beanarchive.xml")));

MyBean user = (MyBean)decoder.readObject();
decoder.close();
		
System.out.println(user);

Note: JavaBean 命名規範:

以下出自:http://lzh166.iteye.com/blog/631838

Sun 推薦的命名規範

1 ,類名要首字母大寫,後面的單詞首字母大寫

2 ,方法名的第一個單詞小寫,後面的單詞首字母大寫

3 ,變量名的第一個單詞小寫,後面的單詞首字母大寫

爲了使 JavaBean 的屬性名和存取方法都符合規範, Sun  JSR 文檔中規定了屬性名和存取方法名的映射規則: ① 屬性名對應的存取方法爲 get/set 加上首字母大寫的屬性名,如屬性 userName 的存取方法爲 setUserName/getUserName。這樣屬性名和存取方法都符合命名規範。這個規則強制的,如果不符合規則就會出現異常。

但是這裏有一個例外規則, Sun 考慮在偶然的情況下會有全大寫的屬性名,所以又定了一條規則: ②如果屬性名的第二個字母是大寫,則它的存取方法是 set/get 加上屬性原名。

上面兩個屬性與存取方法的映射規則如下:

① 屬性名對應的存取方法爲 get/set 加上首字母大寫的屬性名,如屬性 userName 的存取方法爲setUserName/getUserName 

②如果屬性名的第二個字母是大寫,則它的存取方法是 set/get 加上屬性原名。

應用這兩個規則時有兩個特殊情況需要注意 ,屬性名的第一個單詞只有一個字母,如 sName ,按照第 2 條映射規則,它的存取方法爲 setsName/getsName 。這樣存取方法名就與方法名的命名規範有一定的出入,按規範應該是setSName/getSName 。所以最好不要讓屬性名的第一個單詞只有一個字母。另一個特殊情況是起了一個不符合規範的屬性名 Sname ,首字母大寫後面的小寫,這種情況既沒有映射規則,也是不允許出現的。

例子:

public void setAge(int age){ 

        this.age = age;      

}

public int getAge(){

        return this.age;

}

Age-->如果第二個字母是小寫的,則把第一個字母變成小的-->age
 例如:如果你看到JavaBean中的如下的方法,你應該能判讀出他所能操作的JavaBean屬性的名稱
 gettime()--->time
 setTime()--->time
 getCPU()--->CPU

 getsName --->sName

下面用一個表格說明映射規則。

屬性名/類型 getter 方法 setter 方法
xcoordinate/Double public Double getXcoordinate() public void setXcoordinate(Double newValue)
xCoordinate/Double public Double getxCoordinate() public void setxCoordinate(Double newValue)
XCoordinate/Double public Double getXCoordinate() public void setXCoordinate(Double newValue)
Xcoordinate/Double 不允許 不允許
student/Boolean public Boolean getStudent() public void setStudent(Boolean newValue)
student/boolean public boolean getStudent()
public boolean isStudent()
public void setStudent(boolean newValue)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章