JavaBean规范

Posted yusiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaBean规范相关的知识,希望对你有一定的参考价值。

  JavaBean必须要为成员提供get/set方法,只提供其中的一个也是可以的,必须要有一个无参构造器,一般对于具有get或这个set方法的成员我们称之为属性,就算一个属性,没有对应的成员变量只有get/set方法,也是可以的。只有get方法的属性我们称为只读属性,属性的名称是get/set方法去除get/set之后,再将首字母变小写之后的名称,由set/get方法的名称来决定属性名称,而不是成员变量名,但是一般都是一致的。boolean类型的属性的get方法可以是is或者get开头。

package yu.bean;

/**
 * @Auther yusiming
 * @Date 2018/10/12 20:30
 */
public class Person {
    private String name;
    private int age;
    private String gender;

    // 必须提供无参构造器
    public Person() {
    }

    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // 这个方法没有对应的成员,但是id也是一个属性
    public int getId() {
        return 11;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

 

内省

  内省就是通过反射来操作javaBean,但是内省使用起来更加方便一点,因为它掩盖了反射的操作,内省的过程,Introspector这个类叫做内省类

public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        try {
            // BeanInfo是一个javaBean类型的信息类
            BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
            // 通过BeanInfo可以得到所有的属性描述符对象,
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            Method readMethod = propertyDescriptors[0].getReadMethod();
            Method writeMethod = propertyDescriptors[0].getWriteMethod();
            writeMethod.invoke(person, 11);
            System.out.println(person.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  但是这样操作bean还是太麻烦了,我们可以使用Apache提供的工具,commons-beanutils来完成对bean的操作,commons-beanutils对内省进行了进一步的封装,使得对bean的操作更加方便,要使用commons-beanutils首先要导入JAR包:

  • commons-beanutils.jar
  • commons-logging.jar 

  这两jar包之间有依赖关系,

  使用BeanUtils设置属性和获取属性

public class Test {
    public static void main(String[] args) throws Exception {
        String className = "yu.bean.Person";
        Class<?> clazz = Class.forName(className);
        Object bean = clazz.getDeclaredConstructor().newInstance();
        // 设置属性
        BeanUtils.setProperty(bean, "name", "张三");
        BeanUtils.setProperty(bean, "age", 20);
        BeanUtils.setProperty(bean, "gender", "男");
        // Person{name=‘张三‘, age=20, gender=‘男‘}
        System.out.println(bean.toString());
        // 获取属性
        String age = BeanUtils.getProperty(bean, "age");
        // 20
        System.out.println(age);
    }
}

  使用BeanUtils将map中的数据封装到bean中,注意map中的键必须要与bean的属性名一致,才能够封装进去

public class Test {
    public static void main(String[] args) throws Exception {
        Map<String, String> map = new HashMap<>();
        map.put("username", "张三");
        map.put("password", "123");
        User user = new User();
        BeanUtils.populate(user, map);
        // User{username=‘张三‘, password=‘123‘}
        System.out.println(user.toString());
    }
}

  我们可以对BeanUtils再次封装

public static <T> T toBean(Map map, Class<T> clazz) {
    try {
        T bean = clazz.getDeclaredConstructor().newInstance();
        BeanUtils.populate(bean, map);
        return bean;
     } catch (Exception e) {
         throw new RuntimeException(e);
     }
}

   封装之后再次封装map中的数据到bean中,

public class Test {
    public static void main(String[] args) throws Exception {
        Map<String, String> map = new HashMap<>();
        map.put("username", "张三");
        map.put("password", "123");
        User user = CommonUtils.toBean(map, User.class);
        // User{username=‘张三‘, password=‘123‘}
        System.out.println(user.toString());
    }
}

  

 

JSP中与JavaBean相关的标签

  • <jsp:useBean>:创建或者查找bean,可以指定在哪一个域中创建或者查找bean  
  • <jsp:setProperty>:给bean设置属性
  • <jsp:getProperty>:获取bean的属性

  使用方法:

<%--创建或者查找bean,不能重复出现--%>
<jsp:useBean id="user" class="yu.bean.User" scope="request"/>
<jsp:setProperty name="user" property="username" value="张三"/>
<jsp:setProperty name="user" property="password" value="123"/>
<jsp:getProperty name="user" property="username"/>
<jsp:getProperty name="user" property="password"/>

  

 

以上是关于JavaBean规范的主要内容,如果未能解决你的问题,请参考以下文章

JavaBean规范

javaBean规范

JavaBean规范

jsp基础语言-jsp代码段

JavaBean规范

JavaBean 规范