JavaBean
Posted gdwkong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaBean相关的知识,希望对你有一定的参考价值。
JavaBean是一种JAVA语言写成的可重用组件,对数据和功能进行封装,做到“一次编写,到处运行”。
一、JavaBean的规范:
1、必须要有默认构造器(即无参构造方法)。
2、提供get/set方法,如果只有get方法,那这个属性是只读属性。
3、属性:有get/set方法的成员,还可以没有成员,只有get/set方法,属性名get/set方法来决定,而不是成员名称。
4、方法名称满足一定的规范,那么它就是属性。boolean类型的属性,它的读方法可以是is开头,也可以是get开头。
示例:
1 public class Book { 2 private double price; 3 4 public double getPrice() { return price; } 5 6 public void setPrice(double price) { this.price = price; } 7 }
二、内省
为了更好的操作JavaBean的属性,JDK中提供了一套API用来访问某个属性的getter和setter方法,这就是内省(Introspector)。
通过内省操作JavaBean图示
内省类-->Bean信息-->属性描述符-->属性的get/set对应的Method-->反射
示例:
JavaBean类
1 public class Person { 2 private String name; 3 private int age; 4 5 public String getName() { return name; } 6 public void setName(String name) { this.name = name; } 7 public int getAge() { return age; } 8 public void setAge(int age) { this.age = age; } 9 10 @Override 11 public String toString() { 12 return "Person{" + "name=\'" + name + \'\\\'\' + ", age=" + age + \'}\'; 13 } 14 }
内省类:
1 import org.junit.Test; 2 3 import java.beans.PropertyDescriptor; 4 import java.lang.reflect.Method; 5 6 public class IntrospectorDemo { 7 @Test 8 //修改JavaBean的属性 9 public void fun1() throws Exception { 10 //创建Person对象 11 Person p = new Person (); 12 //使用属性描述器获取Person类name属性的描述信息 13 PropertyDescriptor pd = new PropertyDescriptor ("name",p.getClass ()); 14 //获取name属性对应的setter方法 15 Method method = pd.getWriteMethod (); 16 //调用setter方法,并设置(修改)name属性值 17 method.invoke (p,"张三"); 18 //String类型的数据,表示年龄 19 String val= "20"; 20 //使用属性描述其获取Person类age属性的描述信息 21 pd = new PropertyDescriptor ("age",p.getClass ()); 22 //获取age属性对应的setter方法 23 Method methodAge = pd.getWriteMethod (); 24 //获取属性的Java数据类型 25 Class clazz = pd.getPropertyType (); 26 //根据类型来判断需要为setter方法传入什么类型的实参 27 if (clazz.equals (int.class)) { 28 //调用setter方法,并设置(修改)age属性值 29 methodAge.invoke (p,Integer.valueOf (val)); 30 }else { 31 methodAge.invoke (p,val); 32 } 33 System.out.println (p); 34 } 35 @Test 36 //读取JavaBean的属性 37 public void fun2() throws Exception{ 38 //创建Person对象 39 Person p = new Person (); 40 p.setName ("李四"); 41 p.setAge (25); 42 //使用属性描述器获取Person类name属性的描述信息 43 PropertyDescriptor pd = new PropertyDescriptor ("name",p.getClass ()); 44 //获取name属性对应的getter方法 45 Method method = pd.getReadMethod (); 46 //调用getter方法,并获取name属性值 47 Object o = method.invoke (p); 48 System.out.println ("姓名:"+ o); 49 } 50 }
三、BeanUtils工具
由Apache提供,主要包有commons-beanutils,它是依赖内省完成,依赖包有commons-logging.jar
常用方法:
- BeanUtile.getProperty(Object bean,String propertyName);
- BeanUtile.setProperty(Object bean,String propertyName,String propertyValue);
- BeanUtile.populate(Map map,Object bean);
二示例中内省类可简化为以下代码:
1 public class BeanUtilsDemo1 { 2 @Test 3 public void fun1() throws Exception{ 4 Person p = new Person (); 5 //使用BeanUtils为属性赋值 6 BeanUtils.setProperty (p,"name","Jack"); 7 BeanUtils.setProperty (p,"age","20"); 8 //使用BeanUtils获取属性值 9 String name = BeanUtils.getProperty (p,"name"); 10 String age = BeanUtils.getProperty (p,"age"); 11 System.out.println (name+" "+age); 12 } 13 }
JavaBean封装工具类
1 package commonuntils; 2 3 import org.apache.commons.beanutils.BeanUtils; 4 import java.util.Map; 5 import java.util.UUID; 6 7 public class CommonUtils { 8 /** 9 * 生成不重复的32位长的大写字符串 10 * @return 11 */ 12 public static String uuid() { 13 return UUID.randomUUID().toString().replace("-",""); 14 } 15 /** 16 * 把map转换成指定类型的JavaBean对象 17 * @param map 18 * @param clazz 19 * @return 20 */ 21 public static <T> T toBean(Map map,Class<T> clazz) { 22 try { 23 /** 24 * 1、创建指定类型的JavaBean对象 25 */ 26 T bean = clazz.newInstance(); 27 /** 28 * 2、把数据封装到JavaBean中 29 */ 30 BeanUtils.populate(bean,map); 31 /** 32 * 返回JavaBean对象 33 */ 34 return bean; 35 } catch (Exception e) { 36 throw new RuntimeException(e); 37 } 38 } 39 }
三、jsp中与JavaBean相关的标签
- <jsp:useBean> -->创建或查询bean
- <jsp:useBean id="user1" class="domain.User" scope="session"/>在session域中查找名为user1的bean,如果不存在,创建之
- <jsp:useBean id="user1" class="domain.User" scope="session"/>
- <jsp:setProperty>
- <jsp:setProperty property="username" name="user1" value="admin"/>设置名为user1的这个JavaBean的username属性值为admin
- <jsp:getProperty>
- <jsp:getProperty property="username" name="user1" />获取名为user1的JavaBean的名为username属性值
以上是关于JavaBean的主要内容,如果未能解决你的问题,请参考以下文章