JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。
2012-01-20 23:47
459 查看
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;
}
}
看下面代码 ,有注释。
假设我们有一个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;
}
}
相关文章推荐
- JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。
- JavaBean内省的简单操作,剖析JavaBean属性设置的原理。。
- Java--introspector(内省)操作bean属性
- Java中使用内省操作Bean的所有属性
- 简单的JAVABEAN属性复制方法!
- C#反射技术的简单操作(读取和设置类的属性)
- java14.语言进阶------本地文件操作---文件属性的读取、设置
- C#反射技术的简单操作(读取和设置类的属性)
- 类加载器的方式管理资源和配置文件/JavaBean/重构_内省的简单应用
- Java中Bean对象根据属性名称获取和设置其值和Map的性能
- JavaBean定义、JSP中使用以及内省操作
- C#反射技术的简单操作(读取和设置类的属性、属性值)
- java对excel文件的读写操作,这次是丰富的属性设置
- 黑马程序员-4-JavaBean内省操作
- Java 对JavaBean的简单内省操作
- Java设置以及获取JavaBean私有属性进阶
- JAVA基础加强之对javaBean的内省简单操作
- C#反射技术的简单操作,读取和设置类的属性
- Java本地文件操作(四)文件属性的设置
- xstream javabean设置属性默认值的问题