内省调用JavaBean实现getXxx和setXxx的两种方式
来源:互联网 发布:新星星知我心 编辑:程序博客网 时间:2024/06/10 08:58
一.JavaBean类:Java语言欠缺属性、事件、多重继承功能。所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码。Java Bean正是编写这套胶水代码的惯用模式avaBean:J或约定。这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述约定的类可以用于若干工具或库。
二.内省:内省是Java语言对Bean类属性、事件的一种处理方法。例如类Student中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。
两种方法去获取属性对应的getter/setter方法:
1.通过直接创建PropertyDescriptor类带参构造方法来获取getter/setter
<span style="font-size:14px;">import java.beans.PropertyDescriptor;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class JavaBeanPerson { public static void main(String[] args) throws Exception {// TODO Auto-generated method stub //获取person类Class clazz = Class.forName("Person");Constructor c = clazz.getConstructor(String.class,int.class);Object person = c.newInstance("CDSN",18);//利用PropertyDescriptor类带参构造的对象PropertyDescriptor pd = new PropertyDescriptor("name", clazz);Method getName = pd.getReadMethod();Method setName = pd.getWriteMethod();Object name = getName.invoke(person, null);System.out.println("Person's name:"+name);setName.invoke(person, "CDSN18");String name1 = (String) getName.invoke(person, null);System.out.println("Person's name1:"+name1);}} //JavaBean类class Person{private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}</span>
2.通过PropertyDescriptor数组遍历获取getter/setter。
<span style="font-size:14px;">import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class JavaBeanPerson { public static void main(String[] args) throws Exception {// TODO Auto-generated method stubClass clazz = Class.forName("Person");Constructor c = clazz.getConstructor(String.class,int.class);Object person = c.newInstance("CDSN",18);String age = "age";//获取PropertyDescriptor数组BeanInfo bi = Introspector.getBeanInfo(clazz);PropertyDescriptor[] pds = bi.getPropertyDescriptors();PropertyDescriptor pd = new PropertyDescriptor("age", clazz);Method getAge = pd.getReadMethod();Object ageNum = getAge.invoke(person, null);System.out.println("Person's age:"+ageNum);//利用PropertyDescriptor数组遍历出所求的属性for(PropertyDescriptor pd1 :pds){if(age.equals(pd.getName())){pd1.getWriteMethod().invoke(person,88);Object ageNum1 =pd1.getReadMethod().invoke(person, null);System.out.println("Person's age1:"+ageNum1);break;}}}} //JavaBean类class Person{private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}</span>
0 0
- 内省调用JavaBean实现getXxx和setXxx的两种方式
- java内省的两种实现方式
- setxxx() 和 getxxx() 理解和使用
- JavaBean的两种内省操作
- javabean是什么和总结javabean的两种使用方式
- javabean是什么和总结javabean的两种使用方式
- JAVABEAN是什么和总结JAVABEAN的两种使用方式
- JAVABEAN是什么和总结JAVABEAN的两种使用方式
- JAVABEAN是什么和总结JAVABEAN的两种使用方式
- JAVABEAN是什么和总结JAVABEAN的两种使用方式
- JAVABEAN是什么和总结JAVABEAN的两种使用方式
- JAVABEAN是什么和总结JAVABEAN的两种使用方式
- JAVABEAN是什么和总结JAVABEAN的两种使用方式
- javabean是什么和总结javabean的两种使用方式
- 30-31内省访问JavaBean属性的两种方法
- 内省和javaBean的学习
- 9.1 用内省的方式反射JavaBean
- 使用内省的方式操作JavaBean
- sql中exists,not exists的用法
- 黑马程序员——网络编程
- 第一篇blog
- poj 2251 Dungeon Master
- 自己总结的Xcode5和Xcode7的主要区别
- 内省调用JavaBean实现getXxx和setXxx的两种方式
- 钱宝订单查询 chaqb.com
- ui进阶第二天,一些琐碎的东西
- 读书笔记 -《Python 黑帽子》 ( 二 )
- java33.HTTP通信------使用Http的Post方式与网络交互通信
- 线程倒计时
- Android app引导页(背景图片切换加各个页面动画效果)
- 循序渐进学java基础笔记(1)——开山篇
- KVC 与 KVO 理解