java.beans.* 篇(2)Expression,Statement,Encoder,XmlEncoder,XmlDecoder使用案例

简介: java.beans.* 篇(2)Expression,Statement,Encoder,XmlEncoder,XmlDecoder使用案例


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();
    }

读取结果:

相关文章
|
6天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
30 3
|
7天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
20 2
|
9天前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
9 2
|
14天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
12 1
|
26天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
37 15
|
26天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
32 5
|
30天前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
40 2
|
28天前
|
Java C#
Java的监听处理事件--小球移动案例
Java的监听处理事件--小球移动案例
12 0
|
3月前
|
人工智能 Java 定位技术
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
这篇文章通过一个使用ChatGPT实现的Java扫雷小游戏案例,展示了ChatGPT在编程领域的应用能力。文章中包含了扫雷游戏的Java代码实现,代码中初始化了雷区地图,随机放置雷,计算每个格子周围雷的数量,并提供了一个简单的文本界面与用户交互进行游戏。游戏通过控制台输入接受玩家的指令,并给出相应的反馈。
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
|
3月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
36 2