• JavaBean


    JavaBean规范:

    1.必须要有一个默认的构造器

    2.提供get/set方法,如果只有get方法,那么这个属性是只读属性!

    3.属性:有get/set方法的成员,还可以没有成员,只有get/set方法。

    4.方法名称满足一定的规范,那么它就是属性! boolean类型的属性,它的读方法可以是is开头,也可以是get开头!

    内省:

    内省类--->Bean信息--->属性描述符--->属性的get/set对应的Method!---->可以反射了!

    ==============================用于把Map里的属性封装成JavaBean===================================

    commons-beanutils,它是依赖内省完成的!

      *导包:

        >commons-beanutils.jar

        >commons-logging.jar

    BeanUtils.getProperty(Object bean, String propertyName)

    BeanUtils.setProperty(Object bean, String propertyName, String propertyValue)

    BeanUtils.populate(Map map,  Object bean)

    CommonUtils.toBean(Map map,Class class) 


    示例1:

    People.java--->一个Javabean

     1 package com.xjs.domain;
     2 
     3 public class People {
     4     private String name;
     5     private int age;
     6     private String sex;
     7     public People() {
     8         
     9     }
    10     public String getName() {
    11         return name;
    12     }
    13     public void setName(String name) {
    14         this.name = name;
    15     }
    16     public int getAge() {
    17         return age;
    18     }
    19     public void setAge(int age) {
    20         this.age = age;
    21     }
    22     public String getSex() {
    23         return sex;
    24     }
    25     public void setSex(String sex) {
    26         this.sex = sex;
    27     }
    28     @Override
    29     public String toString() {
    30         return "People [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    31     }
    32 }

    单元测试:

    利用反射得到一个JavaBean实例

    然后通过BeanUtils的setProperty();向bean中赋值

     1     @Test
     2     public void fun1() throws Exception{
     3         String className="com.xjs.domain.People";
     4         Class clazz=Class.forName(className);
     5         Object bean=clazz.newInstance();//创建其实例
     6         
     7         BeanUtils.setProperty(bean, "name", "金泰妍");
     8         BeanUtils.setProperty(bean, "age", "23");//会类型转换
     9         BeanUtils.setProperty(bean, "sex", "");
    10         
    11         System.out.println(bean);    
    12     }

    示例2:

    /*
    * 把Map中的属性直接封装到一个bean中
    * Map:{"username":"金泰妍","password","123"}
    * 我们要把map的数据封装到一个JavaBean中,要求map的key与bean的属性名相同!
    */

    User.java:--->一个JavaBean

     1 package com.xjs.domain;
     2 
     3 public class User {
     4 
     5     private String username;
     6     private String password;
     7     
     8     
     9     public User() {
    10             
    11     }
    12     public String getUsername() {
    13         return username;
    14     }
    15     public void setUsername(String username) {
    16         this.username = username;
    17     }
    18     public String getPassword() {
    19         return password;
    20     }
    21     public void setPassword(String password) {
    22         this.password = password;
    23     }
    24     @Override
    25     public String toString() {
    26         return "User [username=" + username + ", password=" + password + "]";
    27     }
    28 }

    单元测试:

     1     /*
     2      * 把Map中的属性直接封装到一个bean中
     3      * Map:{"username":"金泰妍","password","123"}
     4      * 我们要把map的数据封装到一个JavaBean中,要求map的key与bean的属性名相同!
     5      */
     6     @Test
     7     public void fun2() throws Exception{
     8         Map<String,String> map=new HashMap<String,String>();
     9         map.put("username", "金泰妍");
    10         map.put("password", "123");
    11         
    12         User user=new User();
    13         BeanUtils.populate(user, map);//把map中的数据封装成了一个bean
    14         System.out.println(user);
    15         String name = map.get("username");
    16         System.out.println(name);
    17     }

    示例3:

    把示例2中的部分方法封装,封装成一个工具类

    CommonsUtils.java:

    其中有一个前几篇文章中封装的一个生成不重复的32位长的大写字符串

     1 package com.xjs.utils;
     2 
     3 import java.util.Map;
     4 import java.util.UUID;
     5 
     6 import org.apache.commons.beanutils.BeanUtils;
     7 
     8 
     9 public class CommonsUtils {
    10     /**
    11      * 生成不重复的32位长的大写字符串
    12      * @return
    13      */
    14     public static String uuid(){
    15         return UUID.randomUUID().toString().replace("-", "").toUpperCase();
    16     }
    17     /**
    18      * 把map转换成指定类型的JavaBean对象
    19      * @param map
    20      * @param clazz
    21      * @return
    22      */
    23     public static <T> T toBean(Map map,Class<T> clazz){
    24         try {
    25             //1.创建指定类型的JavaBean对象
    26             T bean = clazz.newInstance();
    27             //2.把数据封装到JavaBean中
    28             BeanUtils.populate(bean, map);
    29             //返回JavaBean对象
    30             return bean;
    31         } catch (Exception e) {
    32             throw new RuntimeException(e);//自己抛出异常
    33         }
    34     }
    35 }

    此工具类,只需传入一个map和一个类即可,便能完成对Map中的数据的封装(到JavaBean中)

    测试单元:

     1     @Test
     2     public void fun3(){
     3         Map<String,String> map=new HashMap<String,String>();
     4         map.put("username", "金泰妍");
     5         map.put("password", "123");
     6         
     7         /*
     8          * request.getParamterMap();得到表单数据,然后封装成一个JavaBean
     9          */
    10         User user=CommonsUtils.toBean(map, User.class);
    11         System.out.println(user);
    12         
    13     }

    从中可以得到:从表单中获取的数据,以Map的形式得到,可以封装到对应的JavaBean中(一个类中),比如注册的信息。

  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/10864556.html
Copyright © 2020-2023  润新知