关于Java中内省的总结
内省基于JavaBean规范对反射进行了封装,提供了更加便捷的通过getter/setter方法来访问字段的方式
- Java内省的知识结构图

- JavaBean的规范
JavaBean在现在可以认为就是普通的Java类,JavaBean规范规定一组通用的规则,开发人员在声明类时,都应该遵守这些规则
1 类中要有一个无参public构造函数
2 类中字段要使用private修饰
3 为希望被外界访问的字段提供getter/setter方法,这些字段称为属性
4 getter方法命名时使用get+属性名称首字母大写形式,比如name属性的getter方法名为getName,setter方法命名方式相似,命名为setName
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
外界可以根据getter/setter方法名反推出属性名,在需要的时候可以让属性名和对应的字段名不一致,从而可以隐藏真正的字段名,具有一定的安全意义等
private String realName; //根据方法名getName反推出属性名为name,但对应的字段名是realName
public String getName() {
return realName;
}
public void setName(String name) {
this.realName = name;
}
如无特殊需求,应该让字段名和属性名保持一致
另外,对于boolean基本类型的字段,比如boolean isMarried,其getter方法也可以是isMarried(),其setter方法也可以是setMarried(value),eclipse等工具默认生成的就是这两个方法,
不过这两个方法名在有些技术框架中是无效的,会导致程序出错,所以最好使用getIsMarried()和setIsMarried(value),而且建议在项目中使用Boolean类型的字段
一些特殊的字段名,比如uName这种第二个字母是大写的情况,其getter方法名应该为getuName();再比如URL这种全部大写的情况,其getter方法应该为getURL()。其实大家应该避免让自己声明的字段名成为上面两种情况
- Java的内省API
Introspector是内省编程的入口,可以把Class对象解析成BeanInfo对象
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
BeanInfo表示一个符合JavaBean规范的类的信息,可以方便的获得类中的属性
PropertyDescriptor表示类中的属性,其实包含了属性名,getter和setter方法
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
PropertyDescriptor[] propDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor propDescriptor : propDescriptors) {
String propName = propDescriptor.getName();
if (!"class".equals(propName)) {
Method getter = propDescriptor.getReadMethod();
Method setter = propDescriptor.getWriteMethod();
}
}
Object声明了getClass()方法来获得对象本身类型的Class对象,由于所有的类都继承自Object,所以所有的类都有getClass()方法。但类中并没有class字段(class是关键字,不可以作为类名),而且也没有setClass()方法,
所以在使用内省编程的时候一般需要过滤掉“class”属性
关于Java中内省的总结的更多相关文章
- 深入理解Java:内省(Introspector)
深入理解Java:内省(Introspector) 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传 ...
- Java的内省机制
我现在的理解就是,Java的内省机制就是针对JavaBean的,可以获取到类的属性名称,以及属性的Getter和Setter方法,应该是在写框架的时候才会用到内省机制,还有一个地方可以用到内省机制,就 ...
- JDK 之 Java Bean 内省机制
JDK 之 Java Bean 内省机制 JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html) JavaBean 是一种特殊的 Jav ...
- Java中的反射机制(一)
基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象的方法的功能来自于J ...
- java中异常和集合
1. java中处理错误情况有两种,1 Error,2 Exception error是无法处理的,Exception是可以处理的情况. Exception中又有两种情况,RuntimeExcep ...
- JAVA中反射机制四
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射四 利用反射获取类的属性 1.通过反射也可以获取到类中的属性,假设我们继续使用Person这个类,然后 ...
- 2018.8.1 Java中的反射和同步详解
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他 ...
- Java中的类反射
一.反射的概念 : 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- Java中的反射原理以及简单运用(原理+例子)
@ 目录 学习总结 1. 为什么要使用反射 2. 反射的概念 3. Java反射加载过程 4. 反射优缺点 5. 字节码对象理解 6. 获取字节码对象(.class)的三种方式 7. 反射常用API ...
随机推荐
- 利用uboot下载引导Kernel(TFTP)以及挂载网络Rootfs(NFS)
背景: 在嵌入式开发中,经常需要对系统的各个部分进行修改.倘若每次修改都烧写到板子中,一来浪费时间,其次影响存储介质寿命. 所以,需要一些手段来避免此类问题. 概览: 编译uboot 将uboot写入 ...
- 阿里云安装mysql,初始化密码修改
阿里云服务器,centos7, rpm包安装MySQL,初始化了个奇葩密码 登陆不上, 修改配置文件/etc/my.cnf,在[mysqld]下面添加一行代码:skip-grant-tables se ...
- Solr查询和过滤器执行顺序剖析
一.简介 Solr的搜索主要由两个操作组成:找到与请求参数相匹配的文档:对这些文档进行排序,返回最相关的匹配文档.默认情况下,文档根据相关度进行排序.这意味着,找到匹配的文档集之后,需要另一个操作来计 ...
- 005.Oracle数据库 , 查询多字段连接合并,并添加文本内容
/*Oracle数据库查询日期在两者之间*/ SELECT PKID , OCCUR_DATE, PKID || ' 曾经沧海难为水 ' ||TO_CHAR( OCCUR_DATE, ' yyyy/m ...
- NIO 组件Buffer
重要属性 属性 描述 Capacity 容量, 即可以容纳的最大数据量; 在缓冲区创建时被设定并且不能改变 Limit 表示缓冲区的当前终点, 不能对缓冲区超过极限的位置进行读写操作, 且极限是可以修 ...
- pyhton scipy最小二乘法(scipy.linalg.lstsq模块)
最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方之和来作为目标J(θ)J(θ),从而找到最优模型. 7. SciPy最小二乘法 最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方 ...
- 讨论(xia che ≖‿≖✧)magic number——1000000007
为什么要对1000000007取模(取余) 来看这篇博客的基本上都是和我一样脑子有坑的人,要么就是看了我某篇大数阶乘,大数的排列组合等类似博客被忽悠过来的.我刚刚说到那些类型的题目一般都要求将输出结果 ...
- UVA - 1346 Songs (贪心+排序)
题意:已知每首歌的标号,长度和播放频率,求一种播放顺序,使得最小,并且输出该播放顺序下第t首歌的标号. 分析: 1.长度越短,播放频率越大的歌排在前面,上式越小. 2.s(i)表示的是当前播放顺序下这 ...
- oracle 开发注意事项
新建表或字段时,不能使用char,统一使用varcha,防止判断null时有遗漏 新建表,索引,序列,新增删除或修改字段的时候,要先判断操作的对象是否存在,否则SLQ会报错 插入或者修改特殊字符,解决 ...
- 四十七、在SAP中,把功能区块整合成一个函数,通过调用函数的办法使代码简洁明了
一.我们查看上一次的代码,非常之凌乱,大体可以分为以下这几个区块 二.我们把最后的2个部分,用函数的方式来写,写法如下: 三.执行程序,和之前一样 四.输出结果