JAVA高新技术——JavaBean、内省、BeanUtils工具包
2014-03-04 18:37
423 查看
JavaBean
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。
这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。
可以这么说一个类中含有set与get方法,都可以称作JavaBean类。
一般来说通过get方法与set方法可以获取和操作JavaBean类中的属性,但是在框架设计中,事先并不知道get和set哪一个成员属性。需要通过反射来完成。
而通过反射获取set和get方法相对麻烦,于是SUN公司提供了对JavaBean类进行操作的一些API————内省
内省
假定有一个Point类,成员变量x,y都有get和set方法。又假定事先不知道操作哪个变量以及对象,操作变量和对象的名称是通过参数传递进来的。如何通过内省的方式对Point类的对象的成员变量进行读写操作?
简单的内省操作——建议使用
public class PropertyDescriptorDemo { public static void main(String[] args) throws Exception{ //假定下面两个数据是通过参数传递进来的 Point pt1=new Point(2,3); String PropertyName="x"; //通过PropertyDescriptor类导出一个属性 PropertyDescriptor pd1=new PropertyDescriptor(PropertyName, pt1.getClass()); //通过PropertyDescriptor的属性方法获取get和set方法 Method readMethod=pd1.getReadMethod(); System.out.println(readMethod.invoke(pt1)); Method writeMethod=pd1.getWriteMethod(); writeMethod.invoke(pt1, 100); System.out.println(readMethod.invoke(pt1)); } }
复杂的内省操作
public class IntrospectorDemo { public static void main(String[] args)throws Exception { Point pt=new Point(2,4); String PropertyName ="x"; //通过Introspector的方法获得BeanInfo BeanInfo beanInfo=Introspector.getBeanInfo(pt.getClass()); //只有得到BeanInfo的所有属性,没有特定的某属性,需要遍历 PropertyDescriptor[] pds= beanInfo.getPropertyDescriptors(); for(PropertyDescriptor pd:pds){ if(pd.getName().equals(PropertyName)){ Method readMethod= pd.getReadMethod(); Object reVal=readMethod.invoke(pt); System.out.println(reVal); } } } }
BeanUtils工具包
Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils注意:BeanUtils包依赖于logging包,所以两个包都有导入。
BeanUtils类的方法非常简单:
static String | getProperty(Object bean, String name) |
static void | setProperty(Object bean, String name, Object value) |
1-BeanUtils工具类在对对象的属性进行操作的时候,会自动进行类型转换。例如tPoint类中的x属性为int类型,
但是设置属性值的时候传入的参数却可以是String类型,返回的也是String类。这是因为内部发生了自动类型转换。这是为了以后开发方便起见。
2-BeanUtils工具类可以对属性进行级联操作,例如Point类还有 变量Private Date Birthday ,而Date(java.util.Date)类中有setTime方法,那么也就相当于Date类型对象有一个time属性,BeanUtils就可以对其进行操作:
[align=left]BeanUtils. setProperty(pt, "birthday.time", "111");[/align]
BeanUtils工具包里有很多类,比如PropertyUtils类,他与BeanUtils类的区别在于不会自动类型转换,即Point的x是int类型的那么不会转成String类型
相关文章推荐
- 黑马程序员——Java高新技术——内省JavaBean及BeanUtils的应用、注解等
- java 高新技术【7】 内省,javabean,BeanUtils以及 java7的新特性
- 黑马程序员--内省和JavaBean--java学习日记13(高新技术)
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
- 黑马程序员 java_高新技术(三)_内省 JavaBean 注解
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
- java高新技术、javaBean和内省
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
- 内省—beanutils工具包 操作javabean属性
- JavaBean内省:认识JavaBean与内省、对JavaBean的内省操作、Beanutils工具包
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级
- 黑马程序员_Java高新技术之 内省 JavaBean
- 2010年Java高新技术A(3)内省 JavaBean 注解
- 泛型、JavaBean内省、beanutils工具包
- 黑马程序员——高新技术(内省、javaBean、BeanUtils工具)
- Java高新技术之JavaBean(内省 IntroSpector)