《黑马程序员》java 内省

javaBean是一种特殊的java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

如果要在两个模块之间传递多个信息,可以将这些信息封装到一个javaBean中,这中javaBean的实例对象通常称之为值对象(vo)。这些信息用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?javabean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,即设置id,至于你把它存到哪个变量上,用管么?如果方法为getId,即获得id,至于你从那个变量上取,用管么?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。

自己敲得实例代码:

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.sql.Date;

import com.itcast.testBean.Person;
/**
 * 
 * 类说明:内省方法实现
 * 作者:test
 * 版本:v1.0 
 * 修改历史:
 */
public class IntorSpectorTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		Person p = new Person("sps",22,new Date(89,8,8));
		String propertyName="age";
		
		Object retVal=getProperty(p, propertyName);
		
		System.out.println(retVal);
		
		Object value=20;
		setProperty(p, propertyName, value);
		
		System.out.println(p.getAge());
		
	}

	private static Object getProperty(Object p, String propertyName)
			throws IntrospectionException, IllegalAccessException,
			InvocationTargetException {
		Object retVal=null;
/*		PropertyDescriptor pd=new PropertyDescriptor(propertyName, p.getClass());
		Method mothod=pd.getReadMethod();
		retVal=mothod.invoke(p);*/
		/**
		 * 方法二上面为方法一
		 */
		BeanInfo beanInfo=Introspector.getBeanInfo(p.getClass());
		PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
		for(PropertyDescriptor pd:pds){
			if(pd.getName().equals(propertyName)){
				Method mothod=pd.getReadMethod();
				retVal=mothod.invoke(p);
			}
		}
		return retVal;
	}

	private static void setProperty(Object p, String propertyName, Object value)
			throws IntrospectionException, IllegalAccessException,
			InvocationTargetException {
		
		PropertyDescriptor pd2=new PropertyDescriptor(propertyName, p.getClass());
		Method mothod2=pd2.getWriteMethod();
		mothod2.invoke(p, value);
	}

}

总之,一个类被当做javaBean使用时,javaBean的属性是根据方法名推断出来的,它根本看不到java内部的成员变量。内省操作javaBean的方式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值