内省对象 用的少,被BeanUtils代替















描述

BeanInfo

对JavaBean进行描述的接口

Introspector

描述所有的JavaBean的成员类

PropertyDescriptor

描述的是JavaBean的属性类

shape.java


 1 package reflect;
2
3 public class Shape {
4 private int x=4;
5 int y;
6 protected int z;
7 public int h;
8 public Shape() {
9 }
10 public Shape(int x, Integer y) {
11 super();
12 this.x = x;
13 this.y = y;
14
15 }
16 public Shape(int x, int y, int z, int h) {
17 super();
18 this.x = x;
19 this.y = y;
20 this.z = z;
21 this.h = h;
22 }
23 public int getX() {
24 return x;
25 }
26 public void setX(int x) {
27 this.x = x;
28 }
29 public int getY() {
30 return y;
31 }
32 public void setY(int y) {
33 this.y = y;
34 }
35 public int getZ() {
36 return z;
37 }
38 public void setZ(int z) {
39 this.z = z;
40 }
41 public int getH() {
42 return h;
43 }
44 public void setH(int h) {
45 this.h = h;
46 }
47 @Override
48 public String toString() {
49 return "Shape [x=" + x + ", y=" + y + ", z=" + z + ", h=" + h
50 + ", getX()=" + getX() + ", getY()=" + getY() + ", getZ()="
51 + getZ() + ", getH()=" + getH() + ", getClass()=" + getClass()
52 + ", hashCode()=" + hashCode() + ", toString()="
53 + super.toString() + "]";
54 }
55
56 }


 1         Shape shape=new Shape();
2 BeanInfo beaninfo=Introspector.getBeanInfo(Shape.class);
3 PropertyDescriptor []pds=beaninfo.getPropertyDescriptors();
4 //返回5个,其中还有一个是Object中的 getClass()和setClass(), 它是根据 getXxx和setXxx找的
5 System.out.println(pds.length);
6 PropertyDescriptor pd = pds[1]; //数组下标 按照字典顺序 第一个是 class、h、x、y、z
7 System.out.println(pd.getName());
8 Method setMethod=pd.getWriteMethod();
9 System.out.println(setMethod.getName());
10 setMethod.invoke(shape, 33);
11 System.out.println(pds[1].getReadMethod().invoke(shape,null));

结果:

5
h
setH
33

时间: 2024-12-21 10:56:07

内省对象 用的少,被BeanUtils代替的相关文章

面向对象为什么要多用对象模式而少用继承模式?

进来学习java的时候遇到了一些经验说多用对象模式,少用继承模式.现在写一点感想. 面向对象的对象之间的哦和方式有继承,实现,关联,依赖,聚合和组合.其中的继承和实现是继承这类模式. 说道的一个原因就是代码污染.例如一个父类非常复杂.而一个继承了这个类的子类可能重写了一部分的方法.但是继承了全部的方法.用户在使用继承的子类的时候可能会调用没有重写的父类的方法并且如果这种方法是在子类的设计者的意图之外的操作,那么子类在继承父类的时候,可以认为不光是继承到了有用的功能,还继承到了垃圾功能,父类的代码

对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀

对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀 性能对比: BeanCopier > PropertyUtils > BeanUtils. 其中BeanCopier的性能高出另外两个100数量级. BeanCopier使用可参考: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp36 对象拷贝的应用现状简介: 业务系统中经常需要两个对象进行属性的拷贝,不能否认逐个的对象拷贝是最快速最

spring BeanUtils 工具实现对象之间的copy

一般我们会开发中会遇到返回用户信息的时候,不需要返回密码或者其他参数,这时候我们需要重新定义一个VO类去除不需要的参数,将原对象copy到VO类中 使用spring的BeanUtils可以实现对象的copy 语法: BeanUtils.copyProperties(source, target); import org.springframework.beans.BeanUtils; SdbDbUser user =userServer.getUserInfo(toUser); UserVO u

【05】 定义类或对象

ECMAScript 定义类或对象 ECMAScript 拥有很多创建基类的方法. (就是说,可以任意的创建类似其他语言的“类”的概念.来创造不同模具,来形成模型.实例,就是我们所谓的模型) 一:原始方式(魔芋:最简单的方式.缺点:无法创建多个实例.此时,对象无法作为模具.) 因为对象的属性和方法可以在对象创建后动态定义,可以编写下面的代码: (魔芋:创建一个对象后,可以任意在很多位置给它添加属性和方法.) var Car=newObject; Car.color ="blue"; C

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

BeanUtils的使用、Java中的路径问题

一.BeanUtils的使用 BeanUtils主要解决的问题: 把对象的属性数据封装到对象中. BeanUtils的好处: 1. BeanUtils设置属性值的时候,如果属性是基本数据 类型,BeanUtils会自动帮我转换数据类型. 2. BeanUtils设置属性值的时候底层也是依赖于get或者Set方法设置以及获取属性值的. 3. BeanUtils设置属性值,如果设置的属性是其他的引用 类型数据,那么这时候必须要注册一个类型转换器. BeanUtilss使用的步骤 1. 导包commo

行为模式--类型对象

理论要点 什么是类型对象:创造一个类A来允许灵活的创造新的类,而类A的每个实例都代表了不同类型的对象.通俗地讲就是定义一个类型对象类和一个有类型的对象类.每个类型对象实例代表一种不同的逻辑类型.每种有类型的对象保存描述它类型的类型对象的引用. 要点: 1,类型对象的基本思想就是给基类一个品种类(breed类),而不是用一些子类继承自这个基类.所以我们在做种类区分的时候就可以只有两个类,怪物类monster和品种类breed,而不是monster,dragon,troll等一堆类.所以在此种情况下

BeanUtils包的使用

BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: (1)   BeanUtils相关包 commons-beanutils-1.8.3.jar commons-beanutils-1.8.3-javadoc.jar commons-beanutils-1.8.3-javadoc.jar commons-beanutils-bean-collections-1.8.3.jar co

Struts1——从BeanUtils看struts的实现原理

在Struts中很典型的特点就是使用了ActionForm来搜集表单数据,但是搜集到的表单数据全部都是String类型的,如果我们直接拿来使用我们会面临一个很麻烦的问题就是频繁的类型装换.Struts中使用了BeanUtils来使我们从繁重的体力劳动中解脱出来. BeanUtils的工作原理: 我们通过一个简单的例子来了解一下他最基本的使用,首先建立一个实体类Student package com.tgb.struts; import java.sql.Date; public class St