public class User {
private Integer id;
private String username;
public User(){}
public User(Integer id,String username){
this.id = id;
this.username = username;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
java.beans.Expression 使用demo
/**
* @description: demos of jdk8 java.beans.Expression class
* java.beans.Expression 作用:用来匹配类方法的表达式,内部通过反射直接执行某方法,节省去自己编写反射部分代码
* 和Statement 类似 同时也是Statement 的实现类,区别是多了执行后获取返回值的方法
* Expression 例子:
*/
@Test
public void testExpression() throws Exception {
User user = new User(1,"alan");
Expression setIdExpression = new Expression(user,"setId",new Object[]{2});
Expression getIdusernameExpression = new Expression(user,"getId",null);
setIdExpression.execute();
Object id = getIdusernameExpression.getValue();
System.out.println(id);
System.out.println(user.getId());
}
java.beans.Statement 使用demo
/**
* @description: demos of jdk8 java.beans.Statement class
* java.beans.Statement 作用:用来匹配类方法的表达式,内部通过反射直接执行某方法,节省去自己编写反射部分代码
* 和Expression 类似 Expression的父类 不过没有过去执行结果的方法
* Statement 例子:
*/
@Test
public void testStatement() throws Exception {
User user = new User(1,"alan");
Statement idStatement = new Statement(user,"setId",new Object[]{2});
Statement usernameStatement = new Statement(user,"setUsername",new Object[]{"jack"});
idStatement.execute();
usernameStatement.execute();
System.out.println(user.getId());
System.out.println(user.getUsername());
}
java.beans.Encoder 使用demo
static class user_PersistenceDelegate extends PersistenceDelegate {
protected Expression instantiate(Object oldInstance, Encoder out) {
User user = (User)oldInstance;
return new Expression(user, user.getClass(), "new", new Object[] {1,"jack"});
}
}
/**
* @description: demos of jdk8 java.beans.Encoder class
* java.beans.Encoder 作用:Encoder 主要用来将一个类当前状态,也就是当前的属性,值 ,参数拆分成一个个的Statement 和Expression 的集合
* 然后Encoder 的子类可以将拆分好的 Statement 和Expression 的集合 持久化,比如保存到文件或者xml 中
* Encoder 本身一般无法独立使用,是很多encoder 类的父类,比如 XMLEncoder,writeObject 是必须子类才可以继承实现的方法,用来写对象
* Encoder 例子:
*/
@Test
public void testEncoder() throws Exception {
User user = new User();
Encoder encoder = new Encoder();
encoder.setPersistenceDelegate(User.class,new user_PersistenceDelegate());
//不是子类没办法直接writeObject,只能手动写一个Statement
encoder.writeStatement(new Statement(user,"setId",new Object[]{"1"}));
System.out.println(encoder);
}
拆分结果:
java.beans.XmlEncoder 使用demo
/**
* @description: demos of jdk8 java.beans.XmlEncoder class
* java.beans.XmlEncoder 作用:XmlEncoder 是 Encoder 的子类 重写 writeObject 方法,将Encoder 拆分成一个个的Statement 和Expression 保存到xml中
* XmlEncoder 例子:
*/
@Test
public void testXmlEncoder() throws Exception {
User user = new User(1,"jack");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
new FileOutputStream("Test.xml"));
XMLEncoder xmlEncoder = new XMLEncoder(bufferedOutputStream);
xmlEncoder.writeObject(user);
xmlEncoder.close();
}
保存xml:
java.beans.XmlDecoder 使用demo
/**
* @description: demos of jdk8 java.beans.XmlDecoder class
* java.beans.XmlDecoder 作用:XmlDncoder 是 XmlEncoder 的解码类 ,XmlEncoder 将类当前状态写入xml,XmlDecoder 会解码将xml 反射解析为对象
* XmlEncoder 例子:
*/
@Test
public void testXmlDecoder() throws Exception {
BufferedInputStream bufferedInputStream = new BufferedInputStream(
new FileInputStream("Test.xml"));
XMLDecoder xmlDecoder = new XMLDecoder(bufferedInputStream);
User user = (User) xmlDecoder.readObject();
xmlDecoder.close();
}
读取结果: