JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。

JavaBean的内省操作 跟反射差不多 ,只是内省操作比反射简单,但是原理都一样, 学会了JavaBean的内省操作 那么对于JavaBean在web中的应用就会有很好的理解,并且明白为什么利用动作指令setProperty就可以设置JavaBean的属性 :

看下面代码 ,有注释。

假设我们有一个JavaBean

package me.test;
public class IntroSpectorTest   
{
 private int x ;
 public IntroSpectorTest(int x)
 {
  this.x=x ;
 }
 public int getX()
 {
  return x ;
 }

 public void  setX(int x)
 {
  this.x=x ;
 }

}

1、这是对 JavaBean的内省操作(这个只是我自己写的代码

package me.test;
import java.lang.reflect.*;
import java.beans.PropertyDescriptor;

public class JavaBeanTest {
 public static void main(String[] args)  throws Exception
 {
  IntroSpectorTest t=new IntroSpectorTest(3) ;     //创建一个JavaBean对象 
  String propertyName="x";     //我们对x属性进行内省操作,定义个String类 保存属性名字
  PropertyDescriptor pt1=new PropertyDescriptor(propertyName,IntroSpectorTest.class) ;  //创建一个 属性描述符类  PropertyDescriptor类 参数是 属性名字和 JavaBean类的字节码
     Method m1=pt1.getReadMethod() ;  //获得设置方法的映射类其实跟反射差不多,通过属性描述符返回 Method对象 ,这个对象是  getX()方法的映射对象
  Object obj=m1.invoke(t);    //调用t对象的getX方法,并返回结果 ,结果自动装箱
  System.out.println(obj);      //打印结果 
  
  PropertyDescriptor pt2=new PropertyDescriptor(propertyName,IntroSpectorTest.class); //创建属性描述类
  Method m2=pt2.getWriteMethod() ;//获得设置方法  对应的映射对象
  m2.invoke(t, 7);  //执行 t对象的setX方法
  
  System.out.println(t.getX());  //打印结果
 
 }

}

 

2、下面是通过Eclipse提供的  Refactor ->Extract Method  提取方法   得到的代码

package me.test;
import java.lang.reflect.*;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

public class JavaBeanTest {
 public static void main(String[] args)  throws Exception
 {
  IntroSpectorTest t=new IntroSpectorTest(3) ;

  String propertyName="x";
  Object obj = getProperty(t, propertyName);     //看看像不像jsp动作指令中的 setProperty 。。。。这就是JavaBean内省操作
  System.out.println(obj); 
  
  setProperty(t, propertyName);     //看看像不像jsp动作指令中的 setProperty 。。。。这就是JavaBean内省操作

  System.out.println(t.getX());
 
 }

 

 

 private static void setProperty(IntroSpectorTest t, String propertyName)    //利用 Eclipse的Refactor自动为我们生成的方法

   throws IntrospectionException, IllegalAccessException,
   InvocationTargetException {
  PropertyDescriptor pt2=new PropertyDescriptor(propertyName,IntroSpectorTest.class);
  Method m2=pt2.getWriteMethod() ;//获得设置方法
  m2.invoke(t, 7);
 }

 private static Object getProperty(IntroSpectorTest t, String propertyName)   //利用 Eclipse的Refactor自动为我们生成的方法 

   throws IntrospectionException, IllegalAccessException,
   InvocationTargetException {
  PropertyDescriptor pt1=new PropertyDescriptor(propertyName,IntroSpectorTest.class) ;
     Method m1=pt1.getReadMethod() ;  //获得设置方法的映射类其实跟反射差不多
  Object obj=m1.invoke(t);
  return obj;
 }

}

 

 

 

 

 

 

 

 

 

 

 

时间: 2024-10-04 09:09:39

JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。的相关文章

使用内省的方式操作JavaBean

import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 使用内省的方式操作JavaBean */ public class IntroSpectorTest { public static void main(Stri

WPF基础到企业应用系列7深入剖析依赖属性(WPF/Silverlight核心)

一. 摘要 首先圣殿骑士很高兴这个系列能得到大家的关注和支持,这个系列从七月份开始到现在才第七篇,上一篇发布是在8月2日,掐指一算有二十多天没有继续更新了,最主要原因一来是想把它写好,二来是因为最近几个月在筹备"云计算之旅"系列,所以一再推迟了发布进度.之前一直都没有想过要录制视频,主要的原因还是怕自己知识有限,从而误导他人,所以前几次浪曦和51CTO邀请录制视频,我都以工作忙.公司内部培训需要时间和自己有待提高等理由委婉的拒绝了,说实在的,自己也知道自己还有很多地方有待提高,还需要向

从零开始学习jQuery(四) 使用jQuery操作元素的属性与样式

一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得大家学习. 二.前言 通过前面几章我们已经能够完全控制jQuery包装集了, 无论是通过选择器选取对象, 或者从包装集中删除,过滤元素. 本章将讲解如何使用jQuery获取和修改元素属性和样式. 三. 区分DOM属性和元素属性 一个img标签: <img src="images/image.1.jpg" id="hibiscus" alt="

深入剖析依赖属性(WPF/Silverlight核心)(下)

十一. 依赖属性元数据 前面我们看到一个依赖属性的注册最全的形式是下面这样子的: public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata, ValidateValueCallback validateValueCallback); 第一个参数是该依赖属性的名字,第二个参数是依赖属性的类型,第三个参数是该依赖属性的所

深入剖析依赖属性(WPF/Silverlight核心)(上)

一. 摘要 前几篇我们讲了WPF的一些基本知识,但是始终没有接触最核心的概念,那么从这篇文章开始的下面几篇文 章中,我们会分别深入讨论一下依赖属性.路由事件.命令和绑定等相关概念,希望这几篇文章对大家能有所 帮助.由于自己才疏学浅且是对这些技术的使用总结和心得体会,错误之处在所难免,怀着技术交流的心态, 在这里发表出来,所以也希望大家能够多多指点,这样在使一部分人受益的同时也能纠正我的错误观点,以便 和各位共同提高. 二. 本文提纲 · 1.摘要 · 2.本文提纲 · 3.比这篇文章更重要的东西

跟我学jquery(四)JQuery框架操作元素的属性与样式 .

在前面几篇博客中,我们初步了解了一下jquery的好处,基本语法,还有一些基本函数,这是学习jquery的基础,在这篇博客中,我们一起来学习一下JQuery框架操作元素的属性与样式,在web开发中,修改页面元素的属性和样式是我们需要常用的功能.所以掌握好这个知识点,对于我们在web开发中也是一个非常有力的利剑.好,下面我们就具体来看一下: 首先来看一下两个概念的区别: 元素属性和Dom属性  对于下面这样一个标签元素: <img  id='img'src="1.jpg"  alt

ASP数据库简单操作教程

教程|数据|数据库 ASP数据库简单操作教程 <1 >.数据库连接(用来单独编制连接文件conn.asp) < % Set conn = Server.CreateObject("ADODB.Connection") conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\bbs\db1\user.mdb") % >

WinXP超级终端的简单操作

  WinXP超级终端的简单操作          首先学习使用超级终端之前我们必须知道超级终端的作用,超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序,通过这些程序,可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的"显示器". 超级终端的原理是将用户输入随时发向串口(采用TCP协议时是发往网口,这里只说串口的情况),但并不显示输入.它显示的是从串口接收到的字符.所以,嵌入式系统的相应程序应该完成的任务便是: 1.将自己的启动信息.过程信息主动发到

如何简单操作PS让拍摄的照片更漂亮

自己使用数码相机拍摄的照片怎么看怎么没有人家拍摄的照片漂亮,要么是构图不好,要么是颜色不够鲜艳,同样到一个景点儿玩,怎么人家拍摄后上传分享的照片就那么漂亮? 简单教你几步操作,让你拍摄的景物照片也漂亮诱人起来~ 工具/原料Photoshop 7.0.1以上版本. 一张普通的风景照片,最好颜色多样一些~ 方法/步骤1运行Photoshop,选取一张颜色多样一些的风景照片,看起来这张照片颜色不鲜艳,一点儿也不漂亮哦~ 2点击Photoshop的菜单"图像",在下拉菜单中反别点击"