1 javaBean是什么?
- javabean是一种规范。其实就是一种实体类,需要满足以下的条件:
- ①必须是public的
- ②必须实现Serializable接口
- ③字段必须私有化
- ④必须提供setter和getter方法
- 示例:
package com; import java.io.Serializable; import java.util.Arrays; /** * 2017/11/2 * 说明: */ public class Student implements Serializable{ private String name ;//字段 private int age;//字段 private int[] aa; public int[] getAa() { return aa; } public void setAa(int[] aa) { this.aa = aa; } 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; } @Override public String toString() { return "Student{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ", aa=" + Arrays.toString(aa) + ‘}‘; } }
- [注意]:被private修改过的不要属性,称为字段,属性是指如上面的代码所示,setName,将set去掉,然后将Name的N变为小写,虽然和字段相同,但是含义是完全不一样的。
2 内省
- 内省是构建在java反射机制的基础之上的,换句话说,没有反射就没有内省。
- 内省主要是用来操作javabean的,很多框架内部都用到了内省技术。
- 从上面的图中,我们可以看出,javabean主要就是用来在各层之间传递数据的。为什么?因为我们将数据封装到javabean中的话,不需要写很多参数。如下所示:
public void add(Student stu){}
public void add(String name,int age);
- 而内省技术,就可以将页面上的数据在传递给控制器之前封装到javabean中,这样,在控制器里我们可以直接操作数据,而不需要再进行其他的处理。
- 示例:内省的示例代码
package com; import java.io.Serializable; import java.util.Arrays; /** * 2017/11/2 * 说明: */ public class Student implements Serializable{ private String name ;//字段 private int age;//字段 private int[] aa; public int[] getAa() { return aa; } public void setAa(int[] aa) { this.aa = aa; } 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; } @Override public String toString() { return "Student{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ", aa=" + Arrays.toString(aa) + ‘}‘; } }
package com; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * 2017/11/2 * 说明:内省技术来封装javaBean技术 */ public class StudentTest { public static void main(String[] args) throws Exception{ Student student = new Student(); Map<String,Object> properties = new HashMap<>(); properties.put("name","张三"); properties.put("age",20); properties.put("aa",new int[]{1,2}); populate(student,properties); System.out.println(student); } public static void populate(Object Obj,Map<String,Object> properties) throws Exception { BeanInfo beanInfo = Introspector.getBeanInfo(Obj.getClass()); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); for(PropertyDescriptor pd : pds){ if(!pd.getName().equals("class")){ String property = pd.getName();//获取每一个属性值 Method method = pd.getWriteMethod(); //遍历properties 的Map集合 for(Iterator<Map.Entry<String,Object>> iterator = properties.entrySet().iterator();iterator.hasNext();){ Map.Entry<String,Object> entry = iterator.next(); String key = entry.getKey(); Object value = entry.getValue(); if(key.equals(property)){ method.invoke(Obj,value); } } } } } }
- 当然,你也可以使用apache的BeanUtils工具包,来将表单上的数据封装到javaBean中。
时间: 2024-10-21 03:18:26