`
哈达f
  • 浏览: 120492 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

内省总结

    博客分类:
  • j2se
 
阅读更多

package com.dhcool.introspect;

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 com.dhcool.bean.Student;

/**
 * 内省处理JavaBean有两种常用的方式:
 * 1.创建出PropertyDscriptor,创建的时候要给出要获取属性的名称和具体要获取的类Class
 * 	 得到PropertyDscriptor后就可以去调用它的方法来处理,主要还是pd.getReadMethod();获取属性值,pd.getWriteMethod();设置属性值,得到具体的方法Method
 *   由Method去invoke()然后传递具体的参数(反射调用) ,就可以设置获取相应的值
 *   
 * 
 * 2.用Introspector.getBeanInfo(student.getClass());去获取特定类的BeanInfo,就是Bean的包装信息
 * 	  然后根据BeanInfo去获取 属性描述器PropertyDscriptors获取到的是一个PropertyDscriptor[]数组
 *   然后迭代这个数组,获取相应属性的属性描述器 PropertyDscriptor
 *   有了PropertyDscriptor就可以去获取相应的方法,之后就可以反射调用相应的方法了
 *	
 * */
public class IntrospectTest {
	
	public static void main(String[] args) throws Exception {
		Student student = new Student();
		String propertyName = "name";	
		setProperty(student, propertyName,"蓝");
		System.out.println(getProperty(student, propertyName));
	}

	//获取属性值
	private static Object getProperty(Object student, String propertyName)
			throws IntrospectionException, IllegalAccessException,
			InvocationTargetException {
		/*PropertyDescriptor pd = new PropertyDescriptor(propertyName,student.getClass());
		Method method = pd.getReadMethod();
		return method.invoke(student);*/
		
		//另一种处理方式
		BeanInfo beanInfo = Introspector.getBeanInfo(student.getClass());
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		Object obj = null;
		for(PropertyDescriptor pd : pds){
			if(pd.getName().equals(propertyName)){
				Method method = pd.getReadMethod();
				obj = method.invoke(student);
			}
		}
		return obj;
	}

	//设置属性值
	private static Object setProperty(Object student, String propertyName, Object value)
			throws IntrospectionException, IllegalAccessException,
			InvocationTargetException {
		//PropertyDescriptor属性描述器,用于获取属性的一些列信息,初始化的时候要给定要获取的属性名称,和要获取的类class
		PropertyDescriptor pd = new PropertyDescriptor(propertyName,student.getClass());
		//获取setName方法
		Method methodName = pd.getWriteMethod();
		//获取了这个方法之后就去调用执行这个方法。如果是静态的方法就不用传入具体的对象,如果是非静态的就要传入具体的对象
		return methodName.invoke(student,value);		
	}

}
 
分享到:
评论

相关推荐

    java ioc,aop实现(内省),仿spring功能实现.

    总结,本主题主要涉及Java的IOC和AOP概念,以及如何通过内省技术实现类似Spring的功能。通过这个过程,我们可以更深入地理解Spring的工作原理,同时提高我们的编程技巧和解决问题的能力。在源码和工具方面,我们可以...

    PHP重构和内省工具

    总结来说,PHP重构和内省工具是提升PHP开发效率、优化代码质量的重要手段。它们通过自动化和智能化的方式,减轻了开发者的工作负担,使代码更易于理解和维护。了解并熟练掌握这些工具,对于任何PHP开发者来说,都是...

    JavaBean及内省文档

    ### 总结 JavaBean 作为一种标准的组件模型,在 Java 开发中起着重要作用。它不仅有助于提高代码的可维护性和复用性,而且还是许多 Java 框架(如 Spring)的基础。掌握 JavaBean 的编写和使用方法,对于 Java ...

    Java中的内省与反射.doc

    #### 四、总结 反射和内省都是Java中非常强大的特性,能够显著提高程序的灵活性和可扩展性。通过对类和对象的元数据进行操作,这两种技术使得开发者能够在运行时动态地改变程序的行为,这对于构建高度灵活的应用...

    【IT十八掌徐培成】Java基础第25天-03.递归获取所有超类-内省获取所有属性-getter-setter.zip

    总结起来,"【IT十八掌徐培成】Java基础第25天-03.递归获取所有超类-内省获取所有属性-getter-setter.zip"这个课程可能涵盖了如何利用Java的递归技术遍历类的继承树,以及通过内省机制动态访问和修改对象的属性,...

    Java基础加强-个人总结doc

    这份"Java基础加强-个人总结doc"文档,结合了张孝祥老师的PPT,为我们提供了全面而深入的学习材料。以下是这份文档可能涵盖的一些核心知识点: 1. **基础知识**:这部分涵盖了Java语言的基础语法,包括变量、数据...

    关于总结和述职报告的异同.doc

    它通过回顾过去,发现和分析问题,从而指导未来的工作,更加注重内省和自我提升。而述职报告的目的则在于对外展示,它不仅是对个人工作能力的展示,更是对组织和上级的一个交代,它是个人职业发展和组织监督评估的...

    实用的个人学习总结合集10篇.pdf

    4. **自我反思与内省**:对于教学效果和学习进步,应经常进行自我反省和总结,寻找改进方法。 5. **独立完成任务**:不论是学生还是教师,诚信和独立完成作业是基本素质,这有助于培养个人责任感和解决问题的能力。 ...

    ★常用内排序算法(C++代码)★

    #### 总结 这些内排序算法,包括插入排序、希尔排序、冒泡排序和快速排序,各自有其特点和适用场景。插入排序适用于小规模或基本有序的数据集;希尔排序通过引入增量序列优化了插入排序,提高了效率;冒泡排序虽然...

    教师个人学习总结.pdf

    4. **自我反思与总结**:通过常读书和深思熟虑,教师能够对自己的教学实践进行反思和内省,找出不足并寻求改进策略。同时,学习并提炼同行的成功经验,为教学理论的创新打下基础。 5. **教学质量的保障**:在日常...

    2021论语个人学习总结.docx

    曾子提出的内省法,正是这一理念的具体实践,它提醒我们在混乱的时代背景下,更要坚守道德底线,通过自我反省来提升个人品质。 总结来说,《论语》中的这两则名言不仅教导我们要平衡内在品质与外在教养,还强调通过...

    心理学史的总结.pdf

    1. 构造主义学派:由德国的冯特和铁钦纳为代表,主张通过实验内省法来研究心理内容,即直接体验到的心理元素。冯特于1879年在莱比锡大学建立了第一个心理学实验室,标志着心理学的独立。他们强调心理是由基本元素...

    202x辽宁教师资格证教育心理学知识点总结.pdf

    以下是针对辽宁省教师资格证考试中教育心理学部分的知识点总结。 一、心理学流派与代表人物 1. 构造主义心理学:冯特和铁钦纳主张通过内省法研究人的内在心理结构。 2. 技能主义学历学:詹姆斯、杜威和安吉尔关注...

    2021年茶行实习总结.docx

    【茶行实习总结】 在2021年的茶行实习经历中,我深入了解到茶行业的独特魅力和丰富内涵。实习期间,我在李记茶行学习并实践,这不仅让我掌握了丰富的茶学理论知识,更重要的是,我体会到了茶行工作中的职业道德与...

    普通心理学精华总结.doc

    【普通心理学精华总结】 普通心理学是研究人类心理现象和行为的科学,主要关注个体的内在心理过程和外在行为表现。以下是对这一领域的核心概念、研究方法及其发展历程的详细阐述。 1. 心理学的研究对象 心理学...

    jdk5特性总结PPT

    这份PPT(幻灯片)旨在总结和解释其中的关键特性。 1. **泛型(Generics)** 泛型允许在类、接口和方法中使用类型参数,提高了代码的类型安全性,避免了运行时类型转换异常。通过泛型,开发者可以编写更具通用性的...

    学习总结(利用Python进行数据分析)

    IPython提供了增强的命令行功能,如tab补全、内省(`?`和`??`)、魔术命令(`%`开头的功能)。`%run`命令用于运行Python脚本,`%load`用于加载Notebook中的代码单元,`%paste`和`%cpaste`则用于从剪贴板中运行代码。...

    2019学年第一学期三年级上语文教学工作总结.pdf

    - 结合多元智能,利用肢体语言、角色扮演等方式,让学生在实践中学习,提高他们的内省智能、交际智能和语言智能。 - 教师根据学生特点和教学内容灵活选用教学方法,确保学生在不同教学环节都能积极参与,提高学习...

Global site tag (gtag.js) - Google Analytics