package li.lang; import java.io.OutputStream; import java.util.List; import li.ioc.AnnotationIocLoader; import li.model.Bean; import li.model.Field; import li.util.IOUtil; import li.util.Log; import li.util.Verify; /** * 将注解配置的Ioc信息导出为xml的工具类 * * @author li (limingwei@mail.com) * @version 0.1.1 (2012-08-22) */ public class IocExporter { private static final Log log = Log.init(); /** * 导出注解IOC配置信息到XML */ public void write(OutputStream out) { log.info("extract start"); List<Bean> beans = new AnnotationIocLoader().getBeans(); IOUtil.write(out, beansToString(beans)); log.info("extract finished"); } /** * 导出bean list */ public String beansToString(List<Bean> beans) { String xmlDoc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<config>\n\t<beans>";// xml文件头 for (Bean bean : beans) {// 每一个 xmlDoc += beanToString(bean);// bean } xmlDoc += "\n </beans>\n</config>";// xml文件尾 return xmlDoc; } /** * 导出一个bean */ private String beanToString(Bean bean) { String beanDoc = "\n <bean "; if (!Verify.isEmpty(bean.name)) {// name beanDoc += "name=\"" + bean.name + "\" "; } beanDoc += "class=\"" + bean.type.getName() + "\"";// class String propertiesDoc = fieldsToString(bean.fields); if (!Verify.isEmpty(propertiesDoc)) { beanDoc += ">" + fieldsToString(bean.fields) + "\n </bean>"; } else { beanDoc += "/>"; } return beanDoc; } private String fieldsToString(List<Field> properties) { String propertiesDoc = ""; for (Field field : properties) { propertiesDoc += fieldToString(field);// property } return propertiesDoc; } /** * 导出一个property */ private String fieldToString(Field field) { if (!Verify.isEmpty(field.value)) {// 有值 return "\n <property name=\"" + field.name + "\" value=\"" + field.value + "\" />"; } else {// 无值 return "\n <property name=\"" + field.name + "\" />"; } } }