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中(一个类中),比如注册的信息。

原文地址:https://www.cnblogs.com/xjs1874704478/p/10864556.html