首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA反照机制 通过反射对javabean进行内省操作

2013-02-17 
JAVA反射机制通过反射对javabean进行内省操作bean类package com.sg.beanpublic class TestBeanReflex {??

JAVA反射机制 通过反射对javabean进行内省操作

bean类

package com.sg.bean;

public class TestBeanReflex {
??? private String x;
??? private String y;
??? public TestBeanReflex(String x, String y) {
??? ??? this.x = x;
??? ??? this.y = y;
??? }
??? public String getX() {
??? ??? return x;
??? }
??? public void setX(String x) {
??? ??? this.x = x;
??? }
??? public String getY() {
??? ??? return y;
??? }
??? public void setY(String y) {
??? ??? this.y = y;
??? }
??? }

?

?

测试类

package com.sg.bean;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class IntroSpectorTest {
??? public static void main(String[] args) throws Exception {
??? ??? TestBeanReflex tbr = new TestBeanReflex("3", "5");

??? ??? String propertyName = "x";
??? ??? String value = "7";
??? ??? //获取bean的属性值
??? ??? Object obj = getProperty(tbr, propertyName);
??? ??? System.out.println(obj);
??? ??? //可以修改bean属性的值
??? ??? setProperty(tbr, propertyName, value);
??? ??? System.out.println(tbr.getX());
??? ???
??? }

??? private static void setProperty(Object tbr, String propertyName,
??? ??? ??? Object value) throws IntrospectionException, IllegalAccessException,
??? ??? ??? InvocationTargetException {
??? ??? PropertyDescriptor pd = new PropertyDescriptor(propertyName, tbr.getClass());
??? ??? Method method = pd.getWriteMethod();
??? ??? method.invoke(tbr, value);
??? }

??? private static Object getProperty(Object tbr, String propertyName)
??? ??? ??? throws IntrospectionException, IllegalAccessException,
??? ??? ??? InvocationTargetException {
??? ??? /*PropertyDescriptor pd = new PropertyDescriptor(propertyName,
??? ??? ??? ??? tbr.getClass());
??? ??? Method method = pd.getReadMethod();
??? ??? Object obj = method.invoke(tbr);*/
??? ???
??? ??? BeanInfo beanInfo? = Introspector.getBeanInfo(tbr.getClass());
??? ??? //getPropertyDescriptors因为此方法返回的是bean的所有变量
??? ??? PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
??? ??? Object obj? = null;
??? ??? for (PropertyDescriptor pd : pds) {
??? ??? ??? //通过判断可以只获取你想要的
??? ??? ??? if (pd.getName().equals(propertyName)) {
??? ??? ??? ??? Method method = pd.getReadMethod();
??? ??? ??? ??? obj = method.invoke(tbr);
??? ??? ??? ??? break;
??? ??? ??? }
??? ??? }
??? ??? return obj;
??? }
}

热点排行