用到的场景:在写推送MQ消息的时候,想一个sendMessage 类去 推送不同的 队列名。
首先用一个Constant类存放了不同的MQ的推送的队列名字 是用@value注入的,里面有多个队列名字,其实对应着这个Constant不同的属性。现在就是将这些队列名字对应的属性通过一个键值(可以在数据库中加个字段,也可以前端交互)存放到一个Map中去,在调用这个类的时候,循环map取出队列名对应的 属性名字的字符串(注意,这里是属性名字的字符串,并不是这个属性的值)。所以就要用到反射机制的PropertyDescriptor去根据这个属性名字的字符串去得到属性的值(这里就是要推送的队列名)
一、一个简单的PropertyDescriptor类的例子
package
testPoi;
import
java.beans.PropertyDescriptor;
import
java.lang.reflect.Method;
public
class
TestPropertyDescriptor {
public
static
void
main(String[]
args
) {
Person
person
=
new
Person();
person
.setName(
"zhangsan"
);
person
.setAge(18);
getFiled(
person
,
"name"
);//结果输出 zhangsan
}
// 通过反射得到name
// 可以看到这是通过 得到
属性的get方法(pd.getReadMethod()) 再调用invole方法取出对应的属性值
//
同样得到set方法(
pd.getWriteMethod()
)
private
static
void
getFiled(Object
object
, String
field
) {
Class<?
extends
Object>
clazz
=
object
.getClass();
PropertyDescriptor
pd
=
null
;
Method
getMethod
=
null
;
try
{
pd
=
new
PropertyDescriptor(
field
,
clazz
);
if
(
null
!=
pd
) {
// 获取 这个 field 属性 的get方法
getMethod
=
pd
.getReadMethod();
Object
invoke
=
getMethod
.invoke(
object
);
System.
out
.println(
invoke
);
}
}
catch
(Exception
e
) {
e
.printStackTrace();
}
}
}