博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaBean规范
阅读量:6632 次
发布时间:2019-06-25

本文共 3977 字,大约阅读时间需要 13 分钟。

  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
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 toBean(Map map, Class
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
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,不能重复出现--%>

  

 

转载于:https://www.cnblogs.com/yusiming/p/9780726.html

你可能感兴趣的文章