- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.beans.*;
- import java.io.*;
- import java.lang.reflect.Method;
- public class myBeanIntrospector
- {
- public myBeanIntrospector()
- {
- try
- {
- //实例化一个Bean
- Student beanObj = new Student();
- //依据Bean产生一个相关的BeanInfo类
- BeanInfo bInfoObject =
- Introspector.getBeanInfo(beanObj.getClass(),beanObj.getClass().getSuperclass());
- //定义一个用于显示的字符串
- String output = "";
- //开始自省
- /*
- * BeanInfo.getMethodDescriptors()
- * 用于获取该Bean中的所有允许公开的成员方法,以MethodDescriptor数组的形式返回
- *
- * MethodDescriptor类
- * 用于记载一个成员方法的所有信息
- * MethodDescriptor.getName()
- * 获得该方法的方法名字
- * MethodDescriptor.getMethod()
- * 获得该方法的方法对象(Method类)
- *
- * Method类
- * 记载一个具体的的方法的所有信息
- * Method.getParameterTypes()
- * 获得该方法所用到的所有参数,以Class数组的形式返回
- *
- * Class..getName()
- * 获得该类型的名字
- */
- output = "内省成员方法:\n";
- MethodDescriptor[] mDescArray = bInfoObject.getMethodDescriptors();
- for (int i=0;i<mDescArray.length ;i++ )
- {
- //获得一个成员方法描述器所代表的方法的名字
- String methodName = mDescArray[i].getName();
- String methodParams = new String();
- //获得该方法对象
- Method methodObj = mDescArray[i].getMethod();
- //通过方法对象获得该方法的所有参数,以Class数组的形式返回
- Class[] parameters = methodObj.getParameterTypes();
- if (parameters.length>0)
- {
- //获得参数的类型的名字
- methodParams = parameters[0].getName();
- for (int j=1;j<parameters.length ;j++ )
- {
- methodParams = methodParams + "," + parameters[j].getName();
- }
- }
- output += methodName + "(" + methodParams + ")\n";
- }
- System.out.println(output);
- /*
- * BeanInfo.getPropertyDescriptors()
- * 用于获取该Bean中的所有允许公开的成员属性,以PropertyDescriptor数组的形式返回
- *
- * PropertyDescriptor类
- * 用于描述一个成员属性
- *
- * PropertyDescriptor.getName()
- * 获得该属性的名字
- *
- * PropertyDescriptor.getPropertyType()
- * 获得该属性的数据类型,以Class的形式给出
- *
- */
- output = "内省成员属性:\n";
- PropertyDescriptor[] mPropertyArray = bInfoObject.getPropertyDescriptors();
- for (int i=0;i<mPropertyArray.length ;i++ )
- {
- String propertyName = mPropertyArray[i].getName();
- Class propertyType = mPropertyArray[i].getPropertyType();
- output += propertyName + " ( " + propertyType.getName() + " )\n";
- }
- System.out.println(output);
- /*
- * BeanInfo.getEventSetDescriptors()
- * 用于获取该Bean中的所有允许公开的成员事件,以EventSetDescriptor数组的形式返回
- *
- * EventSetDescriptor类
- * 用于描述一个成员事件
- *
- * EventSetDescriptor.getName()
- * 获得该事件的名字
- *
- * EventSetDescriptor.getListenerType()
- * 获得该事件所依赖的事件监听器,以Class的形式给出
- *
- */
- output = "内省绑定事件:\n";
- EventSetDescriptor[] mEventArray = bInfoObject.getEventSetDescriptors();
- for (int i=0;i<mEventArray.length ;i++ )
- {
- String EventName = mEventArray[i].getName();
- Class listenerType = mEventArray[i].getListenerType();
- output += EventName + "(" + listenerType.getName() + ")\n";
- }
- System.out.println(output);
- System.out.println("write by esonghui :)");
- }
- catch (Exception e)
- {
- System.out.println("异常:" + e);
- }
- }
- public static void main(String[] args)
- {
- new myBeanIntrospector();
- }
- }
- 浏览: 167614 次
- 性别:
- 来自: 北京
最新评论
-
TonyLee0329:
求真实案例
java中compareTo比较两个日期大小 -
fdyo3:
高手
两个值相同的Integer类型用!=比较出错的问题 -
宋小寒:
http://www.blogjava.net/sternin ...
java多线程socket通信---Telnet
发表评论
-
在同一台服务器上配置多个Tomcat
2015-08-19 18:00 740在一台服务器上配置 ... -
Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
2015-08-19 14:25 1200Mybatis MapperScannerConfig ... -
jboss之启动加载过程详解(-)
2015-05-18 15:06 1209今天看了看jboss的boot.l ... -
Mybatis中几个重要类
2015-04-24 18:44 1320本文基于Mybatis3.2.0版本的代码。 1.org. ... -
『转』Spring Security的核心拦截器
2014-08-07 11:36 9531. HttpSessionContextIntegrat ... -
quartz CronExpression表达式
2014-07-24 14:33 548一个cron表达式有至少6 ... -
environments was not found on the java.library.path: E:\Program Files (x86)\Java
2014-07-23 11:10 918启动的时候出现的这个信息,不是错误,程序也可以正常的运行, ... -
java String 以及字符串直接量 与 字符串驻留池 ...
2014-07-16 13:56 937字符串 (String) 是 java 编程语言中的核心类 ... -
hibernate缓存机制
2014-07-03 00:02 752http://www.blogjava.net/tbwshc/ ... -
hibernate修改部分字段
2014-07-02 23:39 761http://blog.csdn.net/kkdelta/ar ... -
解惑 spring 嵌套事务
2014-06-24 15:44 712/** * @author 王政 * @dat ... -
浅析Java虚拟机结构与机制
2014-05-07 17:04 532浅析Java虚拟机结构与机制 本文旨在给所有希望了解J ... -
多语言调用之 Java调用C/C++
2014-04-09 14:52 6881.创建一个类com.test.TestCall内容如下 ... -
多线程实例
2014-04-09 14:47 530编写具有多线程能力的程序经常会用到的方法有: r ... -
java中的native关键字
2014-04-09 11:43 733JNI是Java Native Interface的 ... -
Spring分布式事务在service中动态切换数据源
2014-04-02 18:23 1133项目采用的是struts2+spring+ibatis架构, ... -
java的finalize
2014-03-31 14:04 519目录 基本预备相关知 ... -
读懂tomcat6 之Catalina.sh --注释版
2014-03-24 10:27 1163粗体字部分是我的注释,可能对那些不太熟悉Shell 的人有 ... -
tomcat下使用cronolog对catalina.out日志文件分割
2014-03-24 10:24 876tomcat 的catalina.out文件的不断 ... -
jsp直接使用session
2014-03-12 11:07 722在servlet中,要得到session并设值 要用 requ ...
相关推荐
总之,Java自省是Java编程中不可或缺的一部分,它极大地增强了程序的灵活性和动态性,但也需要谨慎使用,以避免性能损失和安全性问题。在学习和使用过程中,理解并熟练掌握反射API是至关重要的。
- **安全限制**:默认情况下,自省无法访问私有成员,除非使用`setAccessible(true)`来禁用Java访问控制检查。 - **兼容性**:由于自省涉及到类的内部细节,因此在不同版本的JVM上可能会有不同的表现。 #### 五、...
Java自省类教程 在Java编程中,"自省"(Reflection)是一种强大的特性,它允许程序在运行时检查和操作类、接口、字段以及方法的信息。Java反射机制是Java平台核心API的一部分,通过它我们可以获取类的内部信息,...
Java自省类教程.pdf
第十四章会讨论Java的反射机制和注解,它们是Java动态特性的体现,能够增强代码的灵活性和自省能力。 最后,附录通常会提供一些实用的信息,比如字符集、Unicode、Java版本历史等。 总的来说,《Java核心技术卷一...
讲解JAVA反射机制,如何在运行时动态获取类的信息和调用方法,以及注解的使用,理解其在代码自省和元编程中的应用。 第十讲:JAVA高级特性与实战 涵盖JAVA的高级特性,如枚举、泛型、Lambda表达式等,并结合实际...
这份文档详尽地解释了Java 1.6版本中的各种类、接口、方法和异常,帮助开发者理解和使用Java平台的核心功能。 1. **Java类库概述**:Java API 1.6包括了Java基础类库,如集合框架、I/O流、网络编程、多线程、反射、...
此外,作者对反射背后理论的阐述,如代码自省、代理和类加载等,更是让读者对Java语言有了更深层次的理解和掌握。 ### 专家推荐 该书获得了包括Doug Lea教授(SUNY Oswego,著有《Java并发编程》)和John ...
Java程序设计是一门重要的计算机科学课程,主要针对想要学习如何使用Java编程语言进行软件开发的学员。本电子教案集合了丰富的教学资源,旨在帮助初学者和进阶者深入理解和掌握Java编程的核心概念与实践技巧。 一、...
尽管现代Web开发中Applet的使用已减少,但了解其工作原理对理解Java的历史和Web技术的发展仍有所帮助。 通过这些课件,学习者可以逐步深入到Java的各个核心领域,同时结合例题解答,加深对概念的理解和实际运用能力...
Java中的反射功能允许运行中的程序对自身进行检查,并能直接操作程序的内部属性,即所谓的“自省”能力。这是Java区别于其他编程语言如Pascal、C或C++的一个重要特性,因为在这些语言中无法直接获取函数定义等信息。...
在成为一名出色的Java程序员的道路上,掌握一定的技能是至关重要的。以下就是10项一个Java程序员应必备的技能: 1. **语法**:对Java语法的熟练掌握是基础,...记住,见贤思齐,见不贤而内自省,不断自我完善和进步。
这两部分内容将帮助读者理解Java的高级特性和自省能力。 12. **JVM与内存管理**:了解Java虚拟机的工作原理和内存模型对于优化代码性能至关重要。书中会讲解堆、栈、方法区等区域的分配与回收。 13. **Java标准库...
除了表面的操作,本书还深入探讨了代码进行自省(introspection)、代理(proxy)、类加载(class loading)等底层机制的原理。这为读者提供了更深层次的理解,帮助他们更好地掌握反射的核心思想,并在日常的Java编程中...
`commons-beanutils.jar`库简化了JavaBean的使用,提供了对Java反射和自省API的封装,主要功能有: - 对JavaBean的属性进行便捷的读写操作,无需手动编写getter和setter方法调用。 - 能够将数据结构(如Map)转换为...
垃圾回收是 Java 自动内存管理的一部分,负责识别不再使用的对象并释放它们占用的内存空间。Java 的垃圾回收器会定期检查哪些对象不再有引用指向,从而确定哪些对象可以被回收。12. Java 中的 volatile 关键字的...
`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`接口配合使用,可以创建这样的代理类。 9. **安全性与性能**:虽然反射强大,但也需要注意其潜在的风险。不当使用可能导致安全漏洞,因为反射...
在Java中,反射机制允许开发者在程序运行时动态地加载和使用未知的类,这大大增加了程序的灵活性。例如,我们可以仅凭类的名称在运行时加载类,并获取其属性、方法、构造器等信息,甚至可以动态调用对象的方法或设置...
- **垃圾收集**:Java自动进行内存管理,垃圾收集器负责回收不再使用的对象,理解其工作原理有助于优化程序性能。 - **引用类型**:弱引用、软引用、虚引用和强引用,理解它们在内存管理中的不同作用。 5. **集合...