黑马程序员_Java高新技术_内省&JavaBean

------- android培训java培训、期待与您交流! ----------

内省IntroSpector

主要用于对javaBean的操作

javaBean是一个特殊的java类,主要用于传递数据信息,这种java 类中的方法主要用于访问私有的字段,且方法名符合某种特殊的规则。
一道面试题:写出javaBean 的person 类
javaBean 的属性名由set get决定,一个类被当做javaBean 使用时,javaBean的属性是根据方法名推断出来的,看不到内部的成员变量,属性方法去掉set,get后的名称,就是javaBean的属性,如果属性第二个字母是小写,第一个字母也小写 Age->age
class person 
{
	private int x;
	public void set(int age)
	{
		this.x=age;
	}
	public int get()
	{
		return x;
	}
}

对javaBean 的简单的内省操作

如果两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean 中,这种JavaBean的实例对象称为值对象(Value Object)

这些信息在类中用私有的字段来存储,如果读取和设置这些字段值,javaBean 提供get set方法来确定
将一个类变成javaBean ,在类中定义字段的set get属性方法
如果一个类符合javaBean的特点,可以当做普通的类来使用,但是当做JavaBean 使用,会带来额外的好处:
1,JavaEE 开发中经常使用JavaBean,很多环境要求使用JavaBean 操作

2,JDK 中提供了对javaBean进行操作的API,这套API就称为内省。如果用getX 去访问私有的x会很有难度,用内省这套API操作JavaBean 会更方便

读取javaBean 对象的x 属性

JavaBean 对象的类

public class ReflectPoint {
	
	
	private int x;
	public int y;

	public ReflectPoint(int x, int y) {//alt+shift+s 生成源代码
		
		this.x = x;
		this.y = y;
	
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public String toString()
	{
		return str1+":"+str2+":"+str3;
	}


}
读取x的属性并设置属性的值

public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		//获取ReflectPoint 这个javaBean 对象的x 值
		//创建JavaBean 对象
		ReflectPoint pt1=new ReflectPoint(3,5);
		//用内省的方式获取属性值x
		
		String propertyName="x";
		PropertyDescriptor pd= new PropertyDescriptor(propertyName,pt1.getClass());//参数为属性名和类
		Method methodGetX=pd.getReadMethod();//得到get 方法
		Object  revalue= methodGetX.invoke(pt1);
		System.out.println(revalue);
		//设置属性的值
		PropertyDescriptor pd2= new PropertyDescriptor(propertyName,pt1.getClass());//参数为属性名和类
		Method methodSetX=pd.getWriteMethod();//得到set 方法
		methodSetX.invoke(pt1,7);
		System.out.println(pt1.getX());

	}

对javaBean 复杂的内省操作
采用遍历BeanInfo的所有属性方式来查找和设置某个ReflectPoint对象x 的属性值。把一个类当做javaBean来看就是调用
IntroSpector.getBeanInfo方法,得到的BeanInfo 对象封装了把这个类当做JavaBean看的结果信息

BeanInfo beaninfo=Introspector.getBeanInfo(pt1.getClass());
		PropertyDescriptor[] pds=beaninfo.getPropertyDescriptors();
		for(PropertyDescriptor pd:pds)
		{
			if(pd.getName().equals(propertyName))
			{
				Method methodSetX=pd.getWriteMethod();
				methodSetX.invoke(pt1, value);
				break;
			}
		}
使用BeanUtils 工具包操作JavaBean
BeanUtils 工具包
eclipse 导入工具包,工具包都是jar包形式,将jar包放在工程内部
1,解压
2,工程上新建folder >lib>将需要的jar包复制粘贴至这个文件夹中
3,右击jar 包>build path>add to build path(变成小奶瓶图标)
4,加入logging 导入build path(日志开发包)
                //用BeanUtil 获取pt1的x的属性值,需要添加日志开发包
		System.out.println(BeanUtils.getProperty(pt1, "x"));
		BeanUtils.setProperty(pt1, "x", "22");//注意BeanUtils属性和属性设置的值是String 类型,BeanUtils 自身将其转换成相应类型
		System.out.println(pt1.getX());
		BeanUtils.setProperty(pt1, "birthday.time", "111");
		System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
		PropertyUtils.setProperty(pt1, "x", 27);//注意值的类型int型
		System.out.println(PropertyUtils.getProperty(pt1, "x"));


------- android培训java培训、期待与您交流! ----------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值