zoukankan      html  css  js  c++  java
  • JavaBean

    1,JavaBean是一种规范,也是对类的要求。

    它要求Java类的成员变量提供getting和setting的方法,这样的成员变量我们称之为JavaBean属性。

    比如:

     

    public class User {
        private String username;
        private String password;
     
        public String getUsername() {
           return username;
        }
        public void setUsername(String username) {
           this.username = username;
        }
        public String getPassword() {
           return password;
        }
        public void setPassword(String password) {
           this.password = password;
        }
    }

    2,JavaBean属性

    JavaBean属性是具有getter/setter方法的成员变量。

    也可以只提供getter方法,这样的属性叫只读属性;

    也可以只提供setter方法,这样的属性叫只写属性;

    如果属性类型为boolean类型,那么读方法的格式可以是get或is。

    例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc();

    JavaBean属性名要求:前两个字母要么都大写,要么都小写:

    3,内省

      1)内省的目标是得到JavaBean属性的读、写方法的反射对象,通过反射对JavaBean属性进行操作的一组API。例如User类有名为username的JavaBean属性,通过两个Method对象(一个是getUsenrmae(),一个是setUsername())来操作User对象。

    如果你还不能理解内省是什么,那么我们通过一个问题来了解内省的作用。现在我们有一个Map,内容如下

    public class User {
        private String username;
        private String password;
    
        public User(String username, String password) {
            this.username = username;
            this.password = password;
        }
        public User() {
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String toString() {
            return "User [username=" + username + ", password=" + password + "]";
        }
    }

     现在需要把map的数据封装到一个User对象中!User类有两个JavaBean属性,一个叫username,另一个叫password。你可能想到的是反射,通过map的key来查找User类的Field!这么做是没有问题的,但我们要知道类的成员变量是私有的,虽然也可以通过反射去访问类的私有的成员变量,但我们也要清楚反射访问私有的东西是有“危险”的,所以还是建议通过getUsername和setUsername来访问JavaBean属性。

    Map<String,String> map = new HashMap<String,String>();
            map.put("username", "admin");
            map.put("password", "admin123");

        BeanInfo beanInfo = Introspector.getBeanInfo(User.class);

           PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

           User user = new User();

           for(PropertyDescriptor pd : pds)  {

               String name = pd.getName(); 

               String value = map.get(name);

               if(value != null)  {

                  Method writeMethod = pd.getWriteMethod();

                  writeMethod.invoke(user, value);

               }

           }

           System.out.println(user);


      2)获取BeanInfo:通过Java.beans.introspector的getInfo()方法获取Java.beans.BeanInfo实例,比如

               BeanInfo beaninfo=Introspector.getBeanInfo(User.class);

                                      通过BeanInfo可以得到这个类的所有JavaBean属性的PropertyDescriptor对象,

                                           获取属性描述符:PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();每一个PropertyDescription对象对应                                                     一个JavaBean属性,然后就可以通过PropertyDescription对象来获取这个属性的setting/getting方法了

               String getName()获取JavaBean属性名称

               Method getWriterMethod() 获取写方法

               Method getReadMethod() 获取读方法

                                           参考上面的代码

           3)提到内省,不能不提commons-beanutils这个工具。它底层使用了内省,对内省进行了大量的简化!使用beanutils需要的jar包:

                 commons-beanutils.jar  和  commons-logging.jar;

                可以直接设置 username 和 password 的属性值 admin 和 admin123 

            User user = new User();
            
            BeanUtils.setProperty(user, "username", "admin");
            BeanUtils.setProperty(user, "password", "admin123");

                 也可以获取属性值

    User user = new User("admin", "admin123");
            
            String username = BeanUtils.getProperty(user, "username");
            String password = BeanUtils.getProperty(user, "password");
            
            System.out.println("username=" + username + ", password=" + password);

               还可以封装Map数据到JavaBean对象中

    Map<String,String> map = new HashMap<String,String>();
            map.put("username", "admin");
            map.put("password", "admin123");
            
            User user = new User();
    
            BeanUtils.populate(user, map);
            
            System.out.println(user);
  • 相关阅读:
    深入研究java.lang.Runtime类
    全国省市级联数据sql语句 mysql版
    Tesseract——OCR图像识别 入门篇
    Linux数组array基础
    Shell编程中Shift的用法
    对于shell脚本参数获取时的一点小技巧
    RPM是RedHat Package Manager(RedHat软件包管理工具)
    shell 练习
    shell学习总结之自定义函数
    C# 获取汉字的拼音首字母和全拼(含源码)
  • 原文地址:https://www.cnblogs.com/QianYue111/p/9739819.html
Copyright © 2011-2022 走看看