---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
JavaBean
JavaBean是一个特殊的java类,主要用于传递信息,这种java类的方法主要用于访问私有字段,且方法名符合某种命名规则
JavaBean类内部有set()和get()方法
如果一个普通类有set()和get()方法,可以当做JavaBean来处理
JavaBean的属性X是根据其中的setX和getX方法来确定的,而不是依据其中的变量,如方法名为setName,该方法是设置name,getName获取name;去掉set或者get前缀,剩余部分就是属性名称。如果剩余部分的第二个字母小写,则把剩余部分改为小写如果第二个字母是小写的,那么把第一个字母变成小写的,如果第二个字母是大写的,那么第一个字母不变
例如:1:通过setAPI()获得属性API 2:通过setName()获得属性name
JavaBean是反射的实际应用之一:它能让一些工具可视化的操作软件组件。这些组件通过反射的动态载入并取得java类的属性
如果第二个字母是小写的,那么把第一个字母变成小写的,如果第二个字母是大写的,那么第一个字母不变
JavaBean来获取属性的值
示例:
public class javaBean {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ReflectPoint rp1 = new ReflectPoint(7,"hello");
String PropertyName = "x";//设置属性的名字
PropertyDescriptor pd = new PropertyDescriptor(PropertyName,rp1.getClass());
//传入X的变量,和对象,正式获取对象rp1的属性
/*Method methodSetX = pd.getWriteMethod();
methodSetX.invoke(rp1, 10);*/
Method methodGetX = pd.getReadMethod();
//获取对象rp1的属性X的读取方法,返回值是Method类型的
Object retValue = methodGetX.invoke(rp1);
//调用对象rp1的getX()这个方法,会有一个返回值,外界是不知道是什么类型的,所以用Object接收
System.out.println(retValue);
}
}
BeanUtils工具包
1、BeanUtils等工具包都是由阿帕奇提供的,为了便于开发。
2、BeanUtils可以将8种基本数据类型进行自动的转换,因此对于非基本数据类型,就需要注册转换器Converter,这就需要ConverUtils包。
3、好处:
1)提供的set或get方法中,传入的是字符串,返回的还是字符串,因为在浏览器中,用户输入到文本框的都是以字符串的形式发送至服务器上的,所以操作的都是字符串。也就是说这个工具包的内部有自动将整数转换为字符串的操作。
2)支持属性的级联操作,即支持属性链。如可以设置:人的脑袋上的眼睛的眼珠的颜色。这种级联属性的属性连如果自己用反射,那就很困难了,通过这个工具包就可以轻松调用。
4、可以和Map集合进行相互转换:可将属性信息通过键值对的形式作为Map集合存储(通过staticjava.util.Mapdescribe(java.lang.Object bean)的方法)。也可以将Map集合转换为JavaBean中的属性信息(通过static voidpopulate(java.lang.Objectbean, java.util.Map properties)的方法)。
注:要正常使用BeanUtils工具,还要将Apache公司的logging(日志)的jar包也添加进BuildPath。
Eclipse操作技巧:
在工程中导入工具jar包。
两种方式:
1,右键项目--选择Properties---Java Build Path--选择Liberiers标签。AddExternalJars--选择要导入的jar包。即可。
这样做有个问题就是如果jar路径发生变化。项目就不能使用到这个jar包。
2,在项目中建立一个lib目录,专门用于存放项目所使用到的jar工具包。将要使用到jar包复制粘贴进来,并在jar上点右键--选择BuilderPath---Add to BiuldPath,即可。这时jar包中的对象,就可以使用了。
推荐用第二种方式:jar包绑定到项目内部,随着项目移动。
现在用BeanUtils去操作上面的代码
获取X的值:
BeanUtils.getProperty(rp1,”x”);//此时返回的就是属性X的值
设置X的值
BeanUtils.setProperty(rp1,“X”,“9”)//把x的值设置为9,要注意参数值是String类型
虽然X的值的类型是int类型,但是用BeanUtils设置的时候,要用String类型设置,内部自动完成了类型转换
BeanUtils可以操作javaBean,还可以操作map
这属于java7的属性
Map map = {name:”zxx”,age:18};
BeanUtils.setProperty(map,”xxx”,”20”);//这里年龄值要用字符串形式
PropertyUtils也能够对属性进行赋值(与BeanUtils有一点小小的区别):
PropertyUtils.setProperty(map,”xxx”,20);//这里的年龄值用属性本身的类型
小总结:
BeanUtils是以字符串的形式对属性进行操作
而PropertyUtils是以属性本身的类型来操作
JavaBean使用范例:
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 java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
public class IntroSpectorTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ReflectPoint pt1 = new ReflectPoint(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);
System.out.println(BeanUtils.getProperty(pt1, "x").getClass().getName());
BeanUtils.setProperty(pt1, "x", "9");
System.out.println(pt1.getX());
BeanUtils.setProperty(pt1, "birthday.time", "111");
System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
PropertyUtils.setProperty(pt1, "x", 9);
System.out.println(PropertyUtils.getProperty(pt1, "x").getClass().getName());
}
private static void setProperties(Object pt1, String propertyName,
Object value) throws IntrospectionException,
IllegalAccessException, InvocationTargetException {
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodSetX = pd2.getWriteMethod();
methodSetX.invoke(pt1,value);
}
private static Object getProperty(Object pt1, String propertyName)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
Object retVal = null;
for(PropertyDescriptor pd : pds){
if(pd.getName().equals(propertyName))
{
Method methodGetX = pd.getReadMethod();
retVal = methodGetX.invoke(pt1);
break;
}
}
return retVal;
}
}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net