spring, ApplicationContext,读取bean、属性、属性值
ApplicationContext,读取bean、属性、属性值,demo:
public class HutuAbstractTopicEventcode {
private String ctxPath = "C:/happyday/demo.xml";
private String moduleName = "happybaby";
public static void main(String[] args) {
HutuAbstractTopicEventcode o = new HutuAbstractTopicEventcode();
// 提取出所有topic/eventcode
Map<String, Set<String>> topicEventcodes = o.abstractTopicEventcode();
// 用于计数
int count = 0;
// 打印.
for(Map.Entry<String, Set<String>> entry : topicEventcodes.entrySet()){
String topic = entry.getKey();
Set<String> eventcodes = entry.getValue();
for(String eventcode : eventcodes){
System.err.println(topic + ", " + eventcode);
count ++;
}
}
System.err.println("共计: " + count);
}
/**
* 从xml里提取出所有topic/eventcode,并转化为map类型.
*
* @return
*/
@SuppressWarnings("unchecked")
public Map<String/*topic*/, Set<String/*eventcode*/>> abstractTopicEventcode() {
ApplicationContext context = new FileSystemXmlApplicationContext(ctxPath);
// ApplicationContext context = new ClassPathXmlApplicationContext(ctxPath);
TopicMessageConfig newConfigObject = (TopicMessageConfig) context.getBean(moduleName);
Set<String> attributeSet = this.getAttributeNames(newConfigObject);
for (String attributeName : attributeSet) {
System.err.println("属性名称" + attributeName);
System.err.println("属性值:" + this.getAttributeVlaue(newConfigObject, attributeName));
return (Map<String, Set<String>>) this
.getAttributeVlaue(newConfigObject, attributeName);
}
return null;
}
// ~~~ 内部方法 ~~~
/**
* 获取该bean里的全部属性名称.
*
* @param newConfigObject
* @return
*/
private Set<String> getAttributeNames(TopicMessageConfig newConfigObject) {
PropertyDescriptor[] propertyDescriptors = BeanUtils.getBeanInfo(newConfigObject)
.getPropertyDescriptors();
Set<String> attributeNames = new HashSet<String>();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
if (!propertyDescriptor.getName().equals("class")) {
if (propertyDescriptor.getReadMethod() != null
&& propertyDescriptor.getWriteMethod() != null) {
attributeNames.add(propertyDescriptor.getName());
}
}
}
return attributeNames;
}
/**
* 获取该bean中,对应该属性名的属性值.
*
* @param configObject
* @param attributeName
* @return
*/
private Object getAttributeVlaue(Object configObject, String attributeName) {
PropertyDescriptor[] propertyDescriptors = BeanUtils.getBeanInfo(configObject)
.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
if (propertyDescriptor.getName().equals(attributeName)) {
try {
if (propertyDescriptor.getReadMethod() != null) {
return propertyDescriptor.getReadMethod().invoke(configObject);
}
} catch (InvocationTargetException e) {
this.handleException("get", attributeName, e);
} catch (IllegalAccessException e) {
this.handleException("get", attributeName, e);
}
}
}
return null;
}
/**
* 处理异常.
*
* @param opName
* @param name
* @param e
*/
private void handleException(String opName, String name, Exception e) {
StringBuilder buf = new StringBuilder();
buf.append(opName).append("属性失败,moduleName:").append(this.moduleName);
buf.append(", propertyName:").append(name);
LOGGER.error(buf.toString(), e);
throw new RuntimeException(buf.toString(), e);
}
}

浙公网安备 33010602011771号