内省Introspector 和BeanUtils 工具对反射属性的包装(简单的不是一点点哦)

	public void fun2() throws Exception
	{
		//通过反射和dom4j实例化id=stu1的对象,并输出
		SAXReader reader = new SAXReader();
		Document   document = reader.read(this.getClass().getResourceAsStream("/beans.xml"));

		String xpath="/beans/bean[@id=\"stu1\"]";

		Element element=(Element) document.selectSingleNode(xpath);

		Class clazz=Class.forName(element.attributeValue("className"));
		Student student=(Student) clazz.newInstance();
		List<Element> els=element.elements();
		System.out.println(student);
		//根据变量名获取变量类型
		2");
		for (Element e : els) {
			Field f=clazz.getDeclaredField(e.attributeValue("name"));

			String sClassString=f.getType().getName();

			Method method=clazz.getMethod("set"+captureName(f.getName()),Class.forName(sClassString));
			method.invoke(student, e.attributeValue("value"));

		}
		System.out.println(student);
	}

  使用内省

	public void neixing() throws Exception
	{
		BeanInfo info = Introspector.getBeanInfo(Student.class);

		//获取某个属性的描述器
		PropertyDescriptor pDescriptor=new PropertyDescriptor("name", Student.class);
		//获得某个类的所有描述器
		//		PropertyDescriptor[] pds = info.getPropertyDescriptors();

//		BeanUtils.getP
		Method method=pDescriptor.getReadMethod();
		System.out.println(method.getName());

		//BeanUtils更方便
//		BeanUtils.getProperty(bean, name, value)
//		BeanUtils.setProperty(bean, name, value)

	}

  获得描述器后 getReadMethod(),getSetMethod() 就是对 Method method=clazz.getMethod("set"+captureName(f.getName()),Class.forName(sClassString));极大简化

BeanUtils

	public void fun3() throws Exception
	{
		SAXReader reader = new SAXReader();
		Document   document = reader.read(this.getClass().getResourceAsStream("/beans.xml"));
		String xpath="/beans/bean[@id=\"stu1\"]";
		Element element=(Element) document.selectSingleNode(xpath);
		Class clazz=Class.forName(element.attributeValue("className"));
		Student student=(Student) clazz.newInstance();
		List<Element> els=element.elements();
		System.out.println(student);
		for (Element e : els) {
			Field f=clazz.getDeclaredField(e.attributeValue("name"));
			BeanUtils.setProperty(student, f.getName(), e.attributeValue("value"));
		}
		System.out.println(student);
	}

 beanUtils.getProperty

beanUtils.setPropert

  简化了getMethod() ,和invoke()连个方法

使反射获得属性描述器并执行赋值/取值更方便

时间: 2024-11-05 01:11:52

内省Introspector 和BeanUtils 工具对反射属性的包装(简单的不是一点点哦)的相关文章

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&amp;BeanUtils的使用、自定义BeanUtils工具类

今日内容介绍 u 反射机制的概述和字节码对象的获取方式 u 反射操作构造方法.成员方法.成员属性 u JavaBean的概述&BeanUtils的使用 u 自定义BeanUtils工具类 第1章 反射机制概述.字节码对象的获取方式.反射操作构造方法.成员方法.成员属性 1.1 反射机制的概述和字节码对象的获取方式 1.1.1 反射介绍 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法        这种动态获取的以及动

内省及反射属性复制案例

1.内省 1 /** 2 * 测试内省(可以得到从父类继承的get.set方法) 3 * 4 * @author feigu 5 * 6 */ 7 public class TestIntrospector { 8 public static void main(String[] args) { 9 try { 10 BeanInfo info = Introspector.getBeanInfo(Person.class); 11 // 得到属性描述符 12 PropertyDescripto

Java 内省 Introspector

操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 public class Person { private String name ; private String password; private int age; public String getName() { return name; } public void setName(String

javabean的内省技术和BeanUtils的使用

一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 的getter: String getName() settter: void setName(String name) javabean例子: //快捷键是shift+alt+s public class User { private String name; private int age;

JavaBeans与内省(Introspector)

JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大.    现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的代码.    但是以后学面向抽象编程的时候,即:我们所写的代码完全抽象,比如我们写的框架所要面向的类或方法目前并没有的,而是以后别人用我们的框架写出来的类.但是我们又怎么调用去他们的类get/set方法呢?所以这个时候要用到反射和内省进行抽象编程. /* JavaBean与内省(Introspect

内省(introspector)------&gt;JavaBean

内省(introspector)------>JavaBean    1.问什么要学内省?        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于麻烦,所以SUN        公司开发了一套API,专门操作Java对象的属性    2.什么是JavaBean和属性的读写方法?    3.通过内省技术访问(Java.beans包提供了内省的API)JavaBean的两张方式        贱人 小婊砸 矫情 &.通过introspector类获

内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

JDBC--使用beanutils工具类操作JavaBean

1.在JavaEE中,Java类的属性通过getter,setter来定义: 2.可使用BeanUtils工具包来操作Java类的属性: --Beanutils是由Apache公司开发,能够方便对Bean类进行简便的操作 --涉及到的包: (1)   BeanUtils相关包 commons-beanutils-1.8.3.jar commons-beanutils-1.8.3-javadoc.jar commons-beanutils-1.8.3-javadoc.jar commons-bea

深入理解Java:内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package