• JavaBean 介绍


    // Person.java
        public class Person{
            private String name;
            private int age;
    
            // 无参构造函数
            public Person(){
                super();
            }
    
            // 有参构造函数
            public Person(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 int getId(){
                return "dfkdklfjk";
            }
    
            public String toString(){
                return "Person [name="+name+",age="+age+"]";
            }
        }
    
    1. JavaBean 是特殊的 Java 类, 位于 JavaSE 中的 java.beans 包中;

    2. JavaBean 规范:

      • 必须要有一个默认的无参构造函数;
      • 提供 get/set 方法, 如果只有 get 方法, 那么这个属性是只读属性;
      • 需要被序列化并且实现了 Serializable 接口;
      • 一般对于具有 get/set 方法的成员变量称之为属性. 其实就算一个属性没有对应的成员变量,
        只有 get/set 方法也是可以的. 该属性的名称就是 get/set 方法去除 get/set 后,再把首字母小写.
        例如, 上面代码中的 "id" 属性.
      • boolean 类型的属性, 它的读方法可以是 "is" 开头, 也可以是 "get" 开头;
    3. 内省

      • 内省的目标是得到 JavaBean 属性的读, 写方法的反射对象, 通过反射对 JavaBean 属性进行操作的一组 API.
        例如 Person 类有名为 name 的 JavaBean 属性, 通过两个 Method 对象(一个是 getName(), 一个是 setName()),
        来操作 Person 对象.
    // 得到 BeanInfo, BeanInfo 是一个 JavaBean 类型的信息类
        BeanInfo info = Introspector.getBeanInfo(Person.class);
    
    // 得到属性描述符对象
        PropertyDiscriptor[] discriptors = info.getPropertyDiscriptor();
    
    // 通过 getReadMethod() 或 getWriteMethod() 得到一个属性的读或写方法
    
    // 通过 读/写 方法来操作 JavaBean 属性
    
    
    1. commons-beanutils 工具类是依赖内省完成的!
    • 导包:
      • commons-beanutils.jar
      • commons-logging.jar
    // 示例
        // 第一种方式:
        public void fun1(){
            String className = "cn.itcast.domain.Person";
            Class clazz = Class.forName(className);
            Object bean = clazz.newInstance();
    
            // 使用 BeanUtils 给 bean 的各个属性赋值
            BeanUtils.setProperty(bean,"name","张三");
            BeanUtils.setProperty(bean,"age","25");
    
            // 获取 bean 中属性的值, 返回 String 类型的值
            String age = BeanUtils.getProperty(bean,"age");
    
            System.out.println(bean);
        }
    
        // 第二种方式: 把 map 中的属性直接封装到一个 bean 中
        // Map: {"name":"张三", "age":"25"}
        // 要求: map 中的 key 与 bean 的属性名相同!!
        // 如果 Map:{"name":"李四"},  Person 的值为 Person [name=李四,age=null];
    
        public void fun2(){
    
            Map<String,String> map = new HashMap<String,String>();
            map.put("name","张三");
            map.put("age","25");
    
            Person person = new Person();
            BeanUtils.populate(person,map);  // 此时, person 对象就是 (张三,25);
        }
    
    

    2. jsp 中与 javabean 相关标签

    // 示例:
        <jsp:useBean> : 创建或查询 bean
        // 在 session 域中查找名为 user2 的 bean, 如果不存在, 就创建
        <jsp:useBean id="user2" class="cn.itcast.domain.User" scope="session" />
    
    // 语法格式:
        <jsp:useBean id="自定义id" class="bean 编译的类" scope="bean 作用域">
            <jsp:setProperty name="bean 的 id" property="属性名" value="值"/>
    
            <jsp:getProperty name="bean 的 id" property="属性名"/>
            ......
        </jsp:useBean>
    
    
    // 示例: a.jsp
        <body>
            <jsp:useBean id="person" class="cn.itcast.domain.Person">
                <jsp:setProperty name="person" property="name" value="张三"/>
                <jsp:setProperty name="person" property="age" value="25"/>
    
            </jsp:useBean>
    
            <p>姓名:
                <jsp:getProperty name="person" property="name"/>
            </p>
            <p>年龄:
                <jsp:getProperty name="person" property="age"/>
            </p>
        </body>
    
    // 访问 a.jsp, 运行结果:
        姓名:张三
        年龄:25
    

    参考资料:

  • 相关阅读:
    [ZJOI2011]营救皮卡丘
    TJOI2018Party
    HEOI2013SAO
    [BJOI2017]树的难题
    [HNOI2016]序列
    [SHOI2007]善意的投票
    CF802C Heidi and Library (hard)
    SPOJ DIVCNT2
    LOJ子序列
    BZOJ2882工艺
  • 原文地址:https://www.cnblogs.com/linkworld/p/7596246.html
Copyright © 2020-2023  润新知