在上一個用戶登錄案例中,當從瀏覽器接收參數后,還需要創建 JavaBean 類,對其的屬性每一項賦值,如果屬性少,可以手動完成,但是當屬性非常多,這時就發現非常不方便,在這里就可以使用封裝 JavaBean 的工具類。
示例:
這里的每一項都需要手動賦值,比較麻煩。
BeanUtils 工具類,它可以一次性的把所有請求的參數注入到 JavaBean中,簡化數據封裝,用於封裝 JavaBean。
BeanUtils 工具類,經常用於把 Map 中的值注入到 JavaBean 中,或者是對象屬性值的拷貝操作。
BeanUtils 是 Apache 提供的一個jar 包,使用時需要導入兩個 jar 包。
commons-beanutils-1.8.0jar
commons-logging-1.1-.1.jar
注意:對於封裝的數據必須是標准的 JavaBean 類
JavaBean :標准的Java類
要求:
① 類必須被 public 修飾
② 必須提供空參的構造器
③ 成員變量必須使用 private 修飾
④ 提供公共的 setter 和 getter 方法。
功能:封裝數據。
在使用 BeanUtils 這個工具類,先來了解JavaBean中的成員變量和屬性。
JavaBean的成員變量:就是JavaBean中用private 修飾的變量。
JavaBean的屬性:setter 和 getter 方法截取后的產物。
如: getUsername() --> Username --> username(屬性)
工具類中方法:
setProperty() // 根據屬性來獲取 JavaBean 的屬性值
getProperty() // 根據屬性來設置 JavaBean 的屬性值
populate(Object JavaBean, Map map):將map集合的鍵值對信息,封裝到對應的JavaBean對象中
本質:這個工具類其實是調用 javaBean 中的對應的 setxxx() 方法來給成員進行賦值的。(切記)
還可以對這個工具類進一步封裝成我們自己的工具類,使用時更加便捷。
BeanUtils 工具類(自己封裝)
1 import org.apache.commons.beanutils.BeanUtils; 2
3 import java.util.Map; 4
5 public class BeanUtils { 6
7 /**
8 * 把 Map 中的值注入到對應的 JavaBean 屬性中 9 * @param value 包含各種參數的 map集合 10 * @param bean 封裝數據的 JavaBean對象 11 * @param <T> 泛型 12 * @return
13 */
14 public static <T> T copyParamToBean(Map value, T bean) { 15
16 try { 17 System.out.println("注入之前:" + bean); 18 /**
19 * 把所有請求的參數都注入到 bean 對象中 20 */
21 BeanUtils.populate(bean, value); 22
23 System.out.println("注入之后:" + bean); 24 } catch (Exception e) { 25 e.printStackTrace(); 26 } 27
28 return bean; 29 } 30 }
這樣在 Servlet中封裝 JavaBean 會變的更加簡潔:
示例:
1 //獲取所有的請求參數信息
2 Map<String, String[]> parameterMap = request.getParameterMap(); 3
4 //遍歷所有的參數信息
5 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { 6 System.out.println(entry.getKey() + "=" + Arrays.asList(entry.getValue())); 7 } 8
9 //根據 Map 參數 封裝成對應的 JavaBean 對象
10 User user = WebBeanUtils.copyParamToBean(parameterMap, new User()); 11 System.out.println("user = " + user);