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); } }