黑马程序员Java培训和Android培训:JavaBean
2011-08-04 09:15
423 查看
(1)JavaBean是一种特殊的Java类,主要用于传递数据信息,JavaBean中的方法主要用于访问私有的字段,且方法名符合某种命名规则,举例如下: getAge()方法:Int getAge(){ }无参setAger()方法:void setAger(){}有参,其属性为age,属性名的命名:去掉set后,第二个字母为小写时,属性要小写,相反:如setCPU,属性为CPU,大写。
(2)一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用会更方便,JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。
(3)如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,JavaBean的实例对象通常称为值对象(Value Object,简称VO,一般不传递方法)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。
(4)beanutils工具包,Apache组织开发的
编程实例及笔记:
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
//import org.apache.commons.beanutils.BeanUtils;
//import org.apache.commons.beanutils.PropertyUtils;
public class neixing {
public static void main(String[] args) throws Exception {
Fanshefile pt1 = new Fanshefile(3,5);
String propertyName = "x";
//"x"-->"X"-->"getX"-->MethodGetX-->
//获得某属性的值
Object retVal = getProperty(pt1, propertyName);
System.out.println(retVal);
Object value = 7;
setProperties(pt1, propertyName, value);
//得到属性getProperty() 相当于getX()方法 BeanUtils返回值为String
System.out.println(BeanUtils.getProperty(pt1, "x").getClass().getName());
//相当于seiX()方法 BeanUtils返回值为String
BeanUtils.setProperty(pt1, "x", "9");
System.out.println(pt1.getX());
/*
//java7的新特性 javabean和Map可以相互转换的
Map map = {name:"zxx",age:18};
BeanUtils.setProperty(map, "name", "lhm");
*/
//birthday.time set值
BeanUtils.setProperty(pt1, "birthday.time", "111");
//get值
System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
//setProperty() 里面的值为整数
PropertyUtils.setProperty(pt1, "x", 9);
//getProperty 得到的是一个整数 按其本身的类型进行操作,与BeanUtils不一样
System.out.println(PropertyUtils.getProperty(pt1, "x").getClass().getName());
}
private static void setProperties(Object pt1, String propertyName,
Object value) throws IntrospectionException,
IllegalAccessException, InvocationTargetException {
//把pt1.pt1.getClass()看成是一个javabean类型的类
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
//javabean 类型里面有get和set方法,getWriteMethod()相当于调用了set方法
Method methodSetX = pd2.getWriteMethod();
//set无返回值
methodSetX.invoke(pt1,value);
}
private static Object getProperty(Object pt1, String propertyName)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
/*propertyName想要得到的属性名,即x的值
* 把pt1.pt1.getClass()看成是一个javabean类型的类,想要取得x的属性值
* PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX = pd.getReadMethod();//getReadMethod()相当于调用了get方法
Object retVal = methodGetX.invoke(pt1);*/
//这种方法和上面的方法一样的效果
//BeanInfo代表了一个结果,就是把一个类当做javabean来看,看出来的结果,将看出来的结果封装在BeanInfo里面
//Introspector.getBeanInfo()这种方法可以是 把一个类当做javabean来看,看出来的结果就是BeanInfo
BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());
//得到的是所有的属性描述,是一个数组
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
Object retVal = null;
//遍历,增强for循环的使用
for(PropertyDescriptor pd : pds){
//如果这里面的值和传进来的属性的名称一样 获得某属性的值 propertyName是传进来的值
if(pd.getName().equals(propertyName))
{
Method methodGetX = pd.getReadMethod();
retVal = methodGetX.invoke(pt1);
break;
}
}
return retVal;
}
}
相关文章推荐
- 黑马程序员Java培训、Android培训_Java 学习过程记录_开发前奏
- 黑马程序员Java培训、Android培训-Java 学习过程记录_JavaAPI
- 黑马程序员Java培训和Android培训_jdk1.5新特性
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-5
- 黑马程序员Java培训、Android培训-Java 学习过程记录_多线程
- 黑马程序员Java培训、Android培训_JavaAPI-2
- 黑马程序员Java培训和Android培训_网络编程
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-4
- 黑马程序员Java培训和Android培训:图形界面编程
- 黑马程序员Java培训和Android培训:内部类
- 黑马程序员Java培训、Android培训_Applet
- 黑马程序员Java培训和Android培训:反射
- 黑马程序员Java培训、Android培训-Java 学习过程记录_语言基础3
- 黑马程序员Java培训和Android培训_java高新技术(一)
- 黑马程序员Java培训、Android培训_IO输入与输出
- 黑马程序员Java培训、Android培训-Java 学习过程记录_面向对象上2
- 黑马程序员Java培训、Android培训_Java基础加强_笔记
- 黑马程序员Java培训和Android培训:面向对象
- 黑马程序员Java培训和Android培训_java高新技术(二)
- 黑马程序员Java培训、Android培训-Java 学习过程记录_多线程2