zoukankan      html  css  js  c++  java
  • JavaBean

    **1、JavaBean概述
    1.1、什么是JavaBean
    JavaBean是一种规范,也就是对类的要求。它要求java类的成员变量提供getter/setter方法,
    这样的成员变量被称之为JavaBean属性
    JavaBean还要求类必须提供仅有的无参构造器。
    1.2、JavaBean属性
    JavaBean属性是具有getter/setter方法的成员变量
    *也可以只提供getter方法,这样的属性叫只读属性
    *也可以只提供setter方法,这样的属性叫只写属性
    *如果属性类型为boolean类型,那么读方法的格式可以是get或is。例如:
    名为abc的boolean类型的属性,它的读方法可以是getAbc(),或是isAbc().

    >JavaBean 可能存在属性,但不存在这个成员变量

    **2、内省
    内省的目标是得到JavaBean属性的读,写方法的反射对象,通过反射对JavaBean的属性进行操作
    的一组API。
    2.1、内省之获取BeanInfo
    通过java.beans.Introspector的getBeanInfo()方法来获取java.beans.BeanInfo实例:
    BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
    2.2、得到所有属性描述符(PropertyDescriptor)
    通过BeanInfo可以得到这个类的所有JavaBean属性的PropertyDescriptor对象。然后就可以
    通过PropertyDescriptor对象得到这个属性的getter/setter方法的Method对象了。
    PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

    >每个PropertyDescriptor对象对应一个JavaBean属性
    * String getName():获取JavaBean属性名称
    * Method getReadMethod():获取属性的读方法
    * Method getWriterMethod():获取属性的写方法

    2.3、完成Map数据封装到User对象中
    public void fun() throws Exception{
    Map<String,String> map = new HashMap<String,String>();
    map.put("username","admin");
    map.put("password","admin123");

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

    PropertyDescriptor[] dps = beanInfo.getPropertyDesciptors();

    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);
    }
    }
    }

    **3、commons-beanutils工具
    它底层使用了内省,对内省进行了简化.
    >使用beanuitls需要的jar包
    *commons-beanutils.jar
    *commons-logging.jar

    3.1、设置JavaBean属性
    User user = new User();
    BeanUtils.setProperty(user,"username","admin");
    BeanUtils.setProperty(user,"password","admin123");

    3.2、获取JavaBean属性
    User user = new User("admin","admin123");
    String username = BeanUtils.getProperty(user,"username");
    String password = BeanUtils.getProperty(user,"password");

    3.4、封装Map数据到JavaB对象中
    Map<String,String> map = new HashMap<String,String>();
    map.put("username","admin");
    map.put("password","admin123");

    User user = new User();

    BeanUtils.populate(user,map);

    **4、JSP与JavaBean相关的动作标签
    在JSP中,与JavaBean相关的标签有:
    * <jsp:userBean>:创建JavaBean对象
    * <jsp:setProperty>:设置JavaBean属性
    * <jsp:getProperty>:获取JavaBean属性

    >先建一个JavaBean类:
    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 + "]";
    }
    }

    4.1、<jsp:useBean>
    <jsp:useBean>标签的作用是创建JavaBean对象
    * 在当前JSP页面创建JavaBean对象
    * 把创建的JavaBean对象保存到域对象中
    <jsp:useBean id = "user1" class="cn.domain.Uesr"/>
    上述代码表示在当前jsp页面中创建User类型的对象,并且把它保存到page域中了。
    等同于如下代码:
    <%
    cn.domain.User user1 = new cn.doamian.User();
    pageContext.setAttribute("user1",user1);
    %>

    <jsp:useBean>标签默认是把JavaBean对象保存到page域,还可以通过scope标签属性来
    指定保存的范围。
    <jsp:useBean id = "user1" class="cn.domain.User" scope="page"/>
    <jsp:useBean id = "user2" class="cn.domain.User" scope="request"/>
    <jsp:useBean id = "user3" class="cn.domain.User" scope="response"/>
    <jsp:useBean id = "user4" class="cn.domain.User" scope="application"/>

    <jsp:useBean>标签其实不一定会创建对象!!!其实它会先在指定范围中查找这个对象,
    如果对象不存在才会创建,我们需要重新对它进行翻译:
    <jsp:useBean id="user4" class="cn.domain.User" scope="applicatioin"/>
    <%
    cn.domain.User user4 = (cn.domain.User)application.getAttribute("user4");
    if(user4 == null){
    user4 = new cn.domain.User();
    application.setAttribute("user4",user4);
    }
    %>

    4.2、<jsp:setProperty> 和 <jsp:getProperty>
    <jsp:setProperty>标签的作用是给JavaBean设置属性值,而<jsp:getProperty>是用来
    获取属性值。在使用它们之前要先创建JavaBean.
    <jsp:useBean id="user1" class="cn.domain.User" />
    <jsp:setProperty property="username" name="user1" value="admin" />
    <jsp:setProperty property="password" name="user1" value="admin123" />

    用户名:<jsp:getProperty property="username" name="user1" /><br/>
    密 码:<jsp:getProperty property="password" name="user1" /><br/>

  • 相关阅读:
    27. Remove Element
    26. Remove Duplicates from Sorted Array
    643. Maximum Average Subarray I
    674. Longest Continuous Increasing Subsequence
    1. Two Sum
    217. Contains Duplicate
    448. Find All Numbers Disappeared in an Array
    566. Reshape the Matrix
    628. Maximum Product of Three Numbers
    UVa 1349 Optimal Bus Route Design (最佳完美匹配)
  • 原文地址:https://www.cnblogs.com/trister/p/4601956.html
Copyright © 2011-2022 走看看