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 深入技术八(内省)的更多相关文章

  1. Java加密技术(八)——数字证书

    原文:http://snowolf.iteye.com/blog/391931 请大家在阅读本篇内容时先阅读 Java加密技术(四),预先了解RSA加密算法. 在构建Java代码实现前,我们需要完成证 ...

  2. Java Web技术总结(目录)

    来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...

  3. java 反射技术

    什么是反射?反射就是将字节码中的各种成分映射到相应的java类中来,java反射技术自JDK1.1以来就出现了,目前大多数流行的框架都采用了这种技术,可见其重要性,这篇文章将详细介绍我对java反射技 ...

  4. Java加密技术

    相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法  ...

  5. Java多线程技术学习笔记(二)

    目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

  6. java多线程系列(八)---CountDownLatch和CyclicBarrie

    CountDownLatch 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线 ...

  7. 理解Java的反射与内省及其区别

    java的内省机制和反射机制什么区别 内省操作只针对JavaBean,只有符合JavaBean规则的类的成员才可以采用内省API进行操作....而反射则不同,一个类的所有成员都可以进行反射操作. 内省 ...

  8. (转载)10个实用的但偏执的Java编程技术

    10个实用的但偏执的Java编程技术 在沉浸于编码一段时间以后(比如说我已经投入近20年左右的时间在程序上了),你会渐渐对这些东西习以为常.因为,你知道的…… 作者:小峰来源:码农网|2015-09- ...

  9. 201871010106-丁宣元 《面向对象程序设计(java)》第八周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第八周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

随机推荐

  1. jQuery种种

    jquery UI autocomplete获得焦点自动弹出跟随下拉框--http://blog.csdn.net/jiusong_mi/article/details/49249853 $(&quo ...

  2. 学记:为spring boot写一个自动配置

    spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...

  3. JUC学习笔记--Thread多线程基础

    实现多线程的两种方法 java 实现多线程通过两种方式1.继承Thread类 ,2.实现Runnable接口 class Newthead extends Thread{ public void ru ...

  4. Linux的3个文件时间

    文件的三个时间相信大家都已经很熟悉windows操作系统了,当我们在windows系统下创建一个文件时,系统同时会为这个文件建立相关的参数去描述这个文件,如图: 这些参数包括文件的大小,文件类型,位置 ...

  5. css权威指南学习笔记 —— css选择器

    1,选择器:选择器的一些基本常用规则基本都记得,w3c上都有,平时也常用,不常用的一些后代选择器经常就忘记了.一些归纳一下后代选择器,加深一下印象: a:子选择器:   p>a  a是直接是p的 ...

  6. CCS5.2/CCS5.3/CCS5.4 仿真调试小技巧

    操作系统: WinXP 32bit 仿真器: SEED-XDS560 Plus 开发环境: DSP.com/forum.php?mod=forumdisplay&fid=58" ta ...

  7. 机器学习——利用K-均值聚类算法对未标注数据分组

    聚类是一种无监督的学习,它将相似的对象归到同一簇中.它有点像全自动分类.聚类方法几乎可以应用到所有对象,簇内的对象越相似,聚类的效果越好. K-均值(K-means)聚类算法,之所以称之为K-均值是因 ...

  8. Java/C++之 public、protected、private ; virtual & abstract

    一.绪 Java/C++都是面向对象的第三代计算机高级编程语言,其本质雷同,而语法确有差异,稍不注意容易引起混淆.本文总结了一些这两门语言的差异之处,仅供参考. 二.C++ 对于C++这门语言,就其类 ...

  9. 深入理解javascript原型和闭包 (转)

    该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮 ...

  10. Mysql中sql_mode详解

    阅读目录 简介 sql_mode常用值 session与global 简介 MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式.这样,应用程序就能对服务器操作进 ...