博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
黑马程序员--java基础加强之内省(IntroSpector)
阅读量:4519 次
发布时间:2019-06-08

本文共 2399 字,大约阅读时间需要 7 分钟。

------- android培训java培训、期待与您交流! ----------

一、JavaBean

           1、JavaBean是一种特殊的java类,主要用来传递数据信息,这种java类中的方法主要用来访问私有的字段,且方法名符合某种命名规则。

           2、如果要在两个模块儿中传递多个信息,可以将这些信息封装到JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)

                这些信息在类中用私有字段来存储,如果读取或设置这些信息,需要通过相应的方法来访问。这些方法通常是get和set。

                所以JavaBean的属性是根据getter和setter方法来确定的,而不是根据其中的成员变量。它将get或set方法的前缀去掉,保留后面的字段作为自己的属性名。

                比如:getId>属性名就是CPU。

           3、JDk中对JavaBean的操作提供了一些API,这套API就叫做内省。

需求:用JavaBean的内省获取Test类中的私有成员变量x,y

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//定义一个测试类
class
Test{
   
private
int
x;   
   
private
int
y;
   
public
int
getX() {
       
return
x;
   
}
   
public
void
setX(
int
x) {
       
this
.x = x;
   
}
   
public
int
getY() {
       
return
y;
   
}
   
public
void
setY(
int
y) {
       
this
.y = y;
   
}
   
public
Test(
int
x,
int
y) {
       
super
();
       
this
.x = x;
       
this
.y = y;
   
}  
}
 
public
class
Introspector {
   
private
static
String
x;
 
   
public
static
void
main(
String
[] args) throws Exception {
       
//创建Test对象
       
Test test =
new
Test(
3
,
5
);
       
//将要获取的变量封装成对象
       
String
propertyName =
"x"
;
       
//调用获取方法
       
getProperty(test, propertyName);       
        
       
//定义需要设置后的变量
       
Object
value =
7
;
       
setProperty(test, propertyName, value);
       
System.out.println(test.getX());
   
}
//自定义设置变量的方法,需要传入对象名,变量名,设置后的值
   
private
static
void
setProperty(
Object
obj,
String
propertyName,
Object
value)
           
throws IntrospectionException, IllegalAccessException,
           
InvocationTargetException {
       
//创建属性描述对象,传入变量名,变量名所在的类
       
PropertyDescriptor pd1 =
new
PropertyDescriptor(propertyName, obj.getClass());
       
//获取方法
       
Method methodSetX = pd1.getWriteMethod();
       
//操作方法
       
methodSetX.invoke(obj, value);
   
}
 
   
private
static
void
getProperty(
Object
obj,
String
propertyName)
           
throws IntrospectionException, IllegalAccessException,
           
InvocationTargetException {
       
PropertyDescriptor pd =
new
PropertyDescriptor(propertyName, obj.getClass());
       
Method methodGetX = pd.getReadMethod();
       
//操作方法,得到返回的值。因为get方法不需要参数,所以该处只需要传入对象名即可
       
Object
retVal = methodGetX.invoke(obj);
       
System.out.println(retVal);
   
}
}

二、Beanutils工具包

          1、因为JavaBean的使用频率很高,所以Apache就提供了beanutils工具包来对JavaBean进行操作。

          2、需要从Apache官网下载工具包和日志包logging.jar。

          3、利用工具包提供的方法来获取上个事例的变量就会很方便,只需要一部。

                BeanUtils.getProperty(对象,"变量名");

                BeanUtils.setProperty(对象,"变量名","值(这里是字符串)");

               也可以PropertyUtils.setProperty(对象,"变量名",实际类型);

               这两者区别就是最后面的参数不同。

 

 

------- android培训java培训、期待与您交流! ----------

转载于:https://www.cnblogs.com/guoyanjun2013/archive/2013/04/08/3011516.html

你可能感兴趣的文章
Python matplot画散列图
查看>>
C#/.NET整数的三种强制类型转换(int)、Convert.ToInt32()、int.Parse()的区别
查看>>
算法复习——数位dp(不要62HUD2089)
查看>>
PhpSpreadsheet如何读取excel文件
查看>>
如何选购一款好的人事档案管理系统
查看>>
Spark2.1.0——运行环境准备
查看>>
[转载]C#异步调用四大方法详解
查看>>
在windows下添加php的Imagick扩展
查看>>
python3 爬取百合网的女人们和男人们
查看>>
kubernetes源码阅读笔记——Kubelet(之三)
查看>>
如何利用jQuery post传递含特殊字符的数据
查看>>
中国剩余定理
查看>>
Linux 攻击防护基础排查
查看>>
Codeforces 543.B Destroying Roads
查看>>
noip模拟赛 寻宝之后
查看>>
洛谷P1461 海明码 Hamming Codes
查看>>
ZOJ2833*(并查集)
查看>>
外连接简要总结
查看>>
第一次作业-准备篇
查看>>
【C++】继承时构造函数和析构函数
查看>>