java 深入技术八(内省)
1. javabean的软件设计思想
2.内省:封装了java反射,提供直接操作属性的Setter和getter方法的方法
3.核心API:BeanInfo java 的描述信息,Introspector 内省的变成入口,PropertyDescriptor 属性的描述器
1. javaBean 简介
内省(Insrospector)
javabean 是一中java类的设计思想,对普通java类的设计提供了一些约定,比如,所有的字段都应该是private私有的,应该为所有的字段提供setter和getter方法来操作这些字段,至少有一个无参构造函数(创建对象的newInstance),不可以直接访问一个类的私有字段,要访问,使用setter和getter
//符合javaBean设计思想的普通java类
public class Student{
private String id; //id字段是私有的
private String name ;//name字段是私有的
public Student(){} //提供一个无参数构造函数
public String getId(){} //获得id字段的值
public void setId(String id){} // 设置id字段的值
public String getName(){} //获得name字段的值
public void setName(String name){} //设置name 字段的值
}
2)如何使用数据封装Student对象
存储了数据的Map对象,把这个Map对象中的数据封装成Student对象
Map<String ,Object > map=new HashMap<String ,Object >();
map.put("id","10000000");
map.put("name","建国");
map.put("age",30);
三种方式:直接调用Student对象的响应的setter方法
使用反射技术
使用内省技术
2.使用反射技术封装对象
3.内省API以及使用内省封装对象
java 内省封装了java反射
1. Java 内省依赖javabean设计思想和java反射,内省要求java类符合javabean的设计思想
2.java内省使用java反射解析java类的结构,把字段和该字段对象的setter和getter方法关联起来,封装到PropertyDescriptor对象中,称为属性描述器,通过属性描述器可以直接获得该字段的setter和getter方法的Method对象
3. 使用内省的编程步骤
//获得beanInfo信息,Introspector,propertyDescriptors
BeanInfo beaninfo=Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors=beanInfo.getPropertyDescriptors();
for(PropertyDescriptor propertyDescriptor: propertyDescriptors ){
String fileName=propertyDescriptor.getName();
//获得Method对象之后,就可以按照反射的做法调用方法了
Method setMethod=propertyDescriptor.getWriteMethod();
setMethod.invoke(obj,value);
}
BeanInfo
BeanInfo 是一个符合JavaBean规范的Java类的描述信息,可以通过BeanInfo对象获得所有字段的描述其PropertyDescriptor(包含字段信息和该字段的setter和getter方法)
核心方法: PropertyDescriptor[] getPropertyDescriptors()
BeanInfo的对象通过
BeanInfo beanInfo =Introspector.getBeanInfo(clazz) ;方法获得
Introspector
Introspector 内省,能够解析java类生成该类的BeanInfo信息的对象
Introspector 类是java内省的编程入口,一般都是通过Introspector类解析一个Class对象生成一个BeanInfo对象
BeanInfo beanInfo=Introspector.getBeanInfo(obj.getClass());
getBeanInfo 内部是通过java反射技术来解析一个类
Introspector只是提供了一个解析类的功能,并没有其他东西
PropertyDescriptor
属性描述器包含一个字段的名称,类型,包括此字段的setter和getter方法
核心方法:
Class<?> getPropertyType() //获得字段的类型
Method getReadMethod() //获得字段的读方法(getter)
Method getWritterMethod() //获得字段的写方法(setter)
String getName() //获得字段的名字
java反射和java内省
java反射机制就是通过解析类的内部结构,获得这个类的所有属性和方法,并且可以操作这些属性和调用这些方法
反射技术除了可以使我们开发通用的功能外,还可以让程序在运行时加载并使用最开始不存在的新类
java内省专门用给javabean 服务的,方便把数据封装到对象中
反射和内省的特点
4.动手写ORM
java 深入技术八(内省)的更多相关文章
- Java加密技术(八)——数字证书
原文:http://snowolf.iteye.com/blog/391931 请大家在阅读本篇内容时先阅读 Java加密技术(四),预先了解RSA加密算法. 在构建Java代码实现前,我们需要完成证 ...
- Java Web技术总结(目录)
来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...
- java 反射技术
什么是反射?反射就是将字节码中的各种成分映射到相应的java类中来,java反射技术自JDK1.1以来就出现了,目前大多数流行的框架都采用了这种技术,可见其重要性,这篇文章将详细介绍我对java反射技 ...
- Java加密技术
相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法 ...
- Java多线程技术学习笔记(二)
目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...
- java多线程系列(八)---CountDownLatch和CyclicBarrie
CountDownLatch 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线 ...
- 理解Java的反射与内省及其区别
java的内省机制和反射机制什么区别 内省操作只针对JavaBean,只有符合JavaBean规则的类的成员才可以采用内省API进行操作....而反射则不同,一个类的所有成员都可以进行反射操作. 内省 ...
- (转载)10个实用的但偏执的Java编程技术
10个实用的但偏执的Java编程技术 在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 作者:小峰来源:码农网|2015-09- ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
随机推荐
- static实现单例的隐患
1. 前言 Java的单例有多种实现方式:单线程下的简单版本.无法在指令重排序下正常工作的Double-Check.static.内部类+static.枚举--.这篇文章要讨论的,是在使用static ...
- C#-WebForm-★★★ 分页展示 ★★★
什么是"分页展示"? 分页展示就是将庞大的数据分成若干页,每页展示若干条数据,向用户展示数据 流程:客户端浏览器向服务器发送查询请求 → 服务器从数据库查询数据 → 服务器转换成代 ...
- HTML学习笔记——标签(二)
标签十二:<ul>标签 语义:是没有前后顺序的信息列表 语法: <ul> <li>信息</li> <li>信息</li> ... ...
- 关于C++默认初始化的总结——开个坑
关于C++初始化总结的博客,其实以前在我的独立博客上写过相关的内容,可惜呀,没有续费,腾讯回收了我的空间, 到现在,关于C++初始化的内容,一直是我的心头病,现在准备开个坑,慢慢的总结进来吧. 1.关 ...
- dataTables获取当前行json格式数据
装载表格数据 $(document).ready( function () { //页面加载后装载表格数据 var table = $('#mytable').DataTable( { "s ...
- windows下mysql数据库定时备份。
注意:看本教程先必须会windows自带的"任务计划程序". 首先创建一个bat后缀的文件我的是timerExecutePhp.bat文件 timerExecutePhp.bat ...
- web前端基础知识-(八)Ajax
Ajax即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = 异步 Ja ...
- c# 动态调用WCF方法笔记!
//动态调用wcf方法 string url = "http://localhost:54379/ServiceWCF.svc"; IDoubleService proxy = W ...
- MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
- Mac下安装ionic和cordova,并生成iOS项目
为了开发HTML5,除了最新使用React Native等之外,目前首选的为稳定的ionic+Angularjs来开发iOS和android. Ionic(ionicframework一款接近原生的H ...