黑马程序员之Java中的内省



IntroSpector,内省 主要用来对javaBean来进行操作,

JavaBean是特殊的java类,符合特定的约定规则的java类,两个模块之间要进型多个信息传递时,通常把这些信息封装到一个javaBean类中,javaBean的实例通常叫做值对象(Value Object 简写VO),这就是javaBean的作用

javaBean其实就是符合内部有get 和set方法的java类酒可以看做是javaBean类了

javaBean可以当做普通的java类来操作.普通的java类如果有getSet方法就可以当做javaBean来操作.

javaBean的属性是根据get和set方法的后缀来确定的,javaBean会把例如getAge()setAge(int age)方法存在的javaBean类看做拥有一个age属性.而不去管java类中实际定义的是什么名字.

JavaBean属性名获取规则:去掉get或者set前缀,如果第二个字母是大写的就不变是小写的就把第一个字母变成小写.例如getAge()-----属性 age

getCPU() 属性---CPU ;getClassName() ------------className;

为什么使用javaBean?

因为javaEE开发好多使用javaBean的环境,一些地方要求使用javabean来操作,你没有选择的权利

使用javaBean给获取javaBean类中的属性的带来的很大的便利,API提供了使用方便,功能强大的操作方法.JDK提供了操作javabean类的api这套API就叫内省,内省操作javaBean比普通类操作方式更加方便

Java.beans,java 中提供javaBean操作的包,常用的类就是

java.beans.PropertyDescriptor

通常用来根据属性名称获取属性的get\set方法和设置属性的GET\SET方法

PropertyDescriptor(String propertyName, Class<?> beanClass)
          通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个 PropertyDescriptor。

 Method

getReadMethod()
          获得应该用于读取属性值的方法。

 Method

getWriteMethod()
          获得应该用于写入属性值的方法。

 void

setReadMethod(Method readMethod)
          设置应该用于读取属性值的方法。

 void

setWriteMethod(Method writeMethod)
          设置应该用于写入属性值的方法。

在实际应用是可以进行封装成组合方法来进行更简单的使用.

扩展:更为复杂操作方式:

使用Introspector 类的静态方法

static BeanInfo

getBeanInfo(Class<?> beanClass)

获得把这个类当做javaBean来看的结果,一个BeanInfo对象

在使用BeanInfo对象获得全部的属性对象

PropertyDescriptor[]

getPropertyDescriptors()
          获得 beans PropertyDescriptor。

然后遍历所有的PropertyDescriptor的名称如果和需求的属性名称相同就把这个对象取出,

然后操作方式就和使用PropertyDescriptor类的方式一致了.

两种方式:第一种是通过构造函数获得PropertyDescriptor对象

第二种是通过更为复杂的方式间接获取,

本质上是一致的.

第三方包的使用

Beanutils工具包的使用:

1.Eclipsejar包的导入:

在当前工程下创建一个lib文件夹,把jar文件copy到lib中.

在lib中将jar文件导入:右键把jar文件增加到BUild Path下

2.BeanUtils工具类细节:首先必须有loging.jar包配合使用

其次他直接操作字符串,功能强大.

因为实际web 开发中取得的一般都是字符串数据,使用这个工具操作方便的多,它返回值是字符串类型,设置值直接可以使用字符串.

3.BeanUtils工具支持级联操作.

例如某个对象pt1有个Date类型的属性birthday,Date类中有time这个属性符合Bean规则就可以直接级联设置这个time值

BeanUtils.setProperty(pt1,”birthday.time”,”101010”);

4.javaBean是可以用工具类转换成map集合的,而map集合也可以填充到javaBean中,这个应用很多.

static Map describe(Object bean)

static void populate(Object bean, Map properties)

这两个方法提供map和Bean类之间的转换

BeanUtils不仅可以操作javaBean而且可以操作map集合

5.PropertyUtils

同样拥有getPropertoy和setProperty方法但是这个类的方法是按照原来类型操作的,返回和设置只能使用属性原来的类型,如果不想进行类型转换,或者使用Beanutils转换出错可以直接使用这个工具类





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值