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
1.
/** * @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(); }
读取结果: