定义接口:InitSystemDatas.java /** * 初始化系统数据 * @author Lee * */ public interface InitSystemDatas { /** * 添加或更新(如果已存在则更新)系统的初始化数据 * @param xmlFilePath */ public void addOrUpdateInitDatas(String xmlFilePath); } 实现类: public class InitSystemDatasImpl extends AbstractManager implements InitSystemDatas { private static Log logger = LogFactory.getLog(InitSystemDatasImpl.class); private String file; private OrgManager orgManager; private UserManager userManager; public void addOrUpdateInitDatas(String xmlFilePath){ try { String filePath = null; if(xmlFilePath == null || xmlFilePath.trim().equals("")){ filePath = file; }else{ filePath = xmlFilePath; } //DOM4J使用示例 Document document = new SAXReader().read( Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath) ); importModules( document.selectNodes("//Modules/Module") ,null); importRoleAndAcl(document.selectNodes("//Roles/Role")); importOrgAndPerson(document.selectNodes("//Organizations/Org"),null); } catch (Exception e) { e.printStackTrace(); throw new SystemException("初始化数据生成有误!"); } } //导入模块信息 protected void importModules(List modules,Module parent){ for (Iterator iter = modules.iterator(); iter.hasNext();) { Element element = (Element) iter.next(); Module module = new Module(); module.setName(element.attributeValue("name")); module.setSn(element.attributeValue("sn")); module.setUrl(element.attributeValue("url")); module.setOrderNo(Integer.parseInt(element.attributeValue("orderNo"))); module.setParent(parent); getHibernateTemplate().save(module); logger.info("导入模块【"+module.getName()+"】"); importModules( element.selectNodes("Module") , module); } } protected void importRoleAndAcl(List roles){ for (Iterator iter = roles.iterator(); iter.hasNext();) { Element element = (Element) iter.next(); Role role = new Role(); role.setName(element.attributeValue("name")); getHibernateTemplate().save(role); //给角色授权 List acls = element.selectNodes("Acl"); for (Iterator iterator = acls.iterator(); iterator.hasNext();) { Element aclElem = (Element) iterator.next(); Integer moduleId = (Integer)getSession() .createQuery("select m.id from Module m where m.name = ?") .setParameter(0, aclElem.attributeValue("module")) .uniqueResult(); ACL acl = new ACL(); acl.setPrincipalType(ACL.TYPE_ROLE); acl.setPrincipalSn(role.getId()); acl.setResourceSn(moduleId); if("true".equals(aclElem.attributeValue("C"))){ acl.setPermission(Permission.CREATE, true); } if("true".equals(aclElem.attributeValue("R"))){ acl.setPermission(Permission.READ, true); } if("true".equals(aclElem.attributeValue("U"))){ acl.setPermission(Permission.UPDATE, true); } if("true".equals(aclElem.attributeValue("D"))){ acl.setPermission(Permission.DELETE, true); } getHibernateTemplate().save(acl); } } } protected void importOrgAndPerson(List orgs,Orgnization parent){ for (Iterator iter = orgs.iterator(); iter.hasNext();) { Element element = (Element) iter.next(); Orgnization org = new Orgnization(); org.setName(element.attributeValue("name")); orgManager.addOrg(org, parent == null?0:parent.getId()); //查找机构下的人员信息,并初始化 List persons = element.selectNodes("Person"); for (Iterator iterator = persons.iterator(); iterator.hasNext();) { Element personElem = (Element) iterator.next(); Person person = new Person(); person.setName(personElem.attributeValue("name")); person.setOrg(org); getHibernateTemplate().save(person); //给人员分配登陆帐号 User user = new User(); user.setUsername(personElem.attributeValue("username")); user.setPassword(personElem.attributeValue("password")); user.setPerson(person); getHibernateTemplate().save(user); //给用户分配角色 String roles = personElem.attributeValue("roles"); String[] roleNames = roles.split(","); for(int i=0; i<roleNames.length; i++){ int roleId = (Integer)getSession() .createQuery("select r.id from Role r where r.name = ?") .setParameter(0, roleNames[i]) .uniqueResult(); userManager.addOrUpdateUserRole(user.getId(), roleId, i+1); } } //初始化此机构下的子机构信息 importOrgAndPerson( element.selectNodes("Org") , org); } } public void setFile(String file) { this.file = file; } public void setOrgManager(OrgManager orgManager) { this.orgManager = orgManager; } public void setUserManager(UserManager userManager) { this.userManager = userManager; } } init_datas.xml文件里的数据 <?xml version="1.0" encoding="UTF-8"?> <InitDatas> <Modules> <Module name="个人办公" sn="personaloffice" url="" orderNo="10"> <Module name="我的办公桌" sn="myworkbeach" url="task.do?method=doesTask" orderNo="1010"/> <Module name="我的便签" sn="notepad" url="notepad.do" orderNo="1020"/> <Module name="我的任务" sn="mytask" url="user.do?method=mpInput" orderNo="1030"/> <Module name="通信录" sn="addresslist" url="addresslist.do" orderNo="1040"/> </Module> <Module name="公文管理" sn="doc" url="" orderNo="20"> <Module name="公文维护" sn="document" url="document.do" orderNo="2010"/> <Module name="归档处理" sn="arch" url="document.do?method=searchAllFinishedDocuments" orderNo="2020"/> </Module> <Module name="公共信息" sn="pubinfo" url="" orderNo="30"> <Module name="信息管理" sn="infomgr" url="info.do" orderNo="3010"/> </Module> <Module name="行政办公" sn="puboffice" url="" orderNo="40"> <Module name="会议管理" sn="meeting" url="meetingRoom.do" orderNo="4010"/> <Module name="资产管理" sn="asset" url="asset.do" orderNo="4020"/> <Module name="用品管理" sn="usething" url="usething.do" orderNo="4030"/> <Module name="车辆管理" sn="car" url="car.do" orderNo="4040"/> <Module name="图书管理" sn="book" url="book.do" orderNo="4050"/> </Module> <Module name="消息管理" sn="mail" url="" orderNo="50"> <Module name="收件箱" sn="inbox" url="message.do?method=inbox" orderNo="5010"/> <Module name="发件箱" sn="outbox" url="message.do?method=outbox" orderNo="5020"/> <Module name="垃圾箱" sn="trash" url="message.do?method=trash" orderNo="5030"/> <Module name="聊天记录" sn="record" url="message.do?method=record" orderNo="5040"/> </Module> <Module name="工作流程" sn="workflow" url="" orderNo="60"> <Module name="流程管理" sn="flow" url="workflow.do" orderNo="6010"/> <Module name="表单定义" sn="formdef" url="workflow.do?formdef=true" orderNo="6020"/> </Module> <Module name="组织管理" sn="orgmgr" url="" orderNo="70"> <Module name="机构管理" sn="org" url="org.do" orderNo="7010"/> <Module name="人员管理" sn="person" url="person.do" orderNo="7020"/> </Module> <Module name="权限管理" sn="auth" url="" orderNo="80"> <Module name="模块管理" sn="module" url="module.do" orderNo="8010"/> <Module name="角色管理" sn="role" url="role.do" orderNo="8020"/> <Module name="用户管理" sn="user" url="user.do" orderNo="8030"/> </Module> <Module name="系统管理" sn="sytemmgr" url="" orderNo="90"> <Module name="密码修改" sn="chgpsw" url="user.do?method=chgpsw" orderNo="9010"/> <Module name="代码定义" sn="codedef" url="codedef.do" orderNo="9020"/> <Module name="系统初始化" sn="systeminit" url="systeminit.do" orderNo="9030"/> </Module> <Module name="人事档案" sn="employee" url="" orderNo="100"> <Module name="人员履历" sn="employee1" url="employee.do" orderNo="10010"/> <Module name="转正申请" sn="employee2" url="employee.do" orderNo="10020"/> <Module name="离职申请" sn="employee3" url="employee.do" orderNo="10030"/> <Module name="员工考勤" sn="employee4" url="employee.do" orderNo="10040"/> </Module> </Modules> <Roles> <Role name="系统管理员"> <Acl module="个人办公" C="true" R="true" U="true" D="true"/> <Acl module="我的办公桌" C="true" R="true" U="true" D="true"/> <Acl module="我的便签" C="true" R="true" U="true" D="true"/> <Acl module="我的任务" C="true" R="true" U="true" D="true"/> <Acl module="通信录" C="true" R="true" U="true" D="true"/> <Acl module="公文管理" C="true" R="true" U="true" D="true"/> <Acl module="公文维护" C="true" R="true" U="true" D="true"/> <Acl module="归档处理" C="true" R="true" U="true" D="true"/> <Acl module="公共信息" C="true" R="true" U="true" D="true"/> <Acl module="信息管理" C="true" R="true" U="true" D="true"/> <Acl module="行政办公" C="true" R="true" U="true" D="true"/> <Acl module="会议管理" C="true" R="true" U="true" D="true"/> <Acl module="资产管理" C="true" R="true" U="true" D="true"/> <Acl module="用品管理" C="true" R="true" U="true" D="true"/> <Acl module="车辆管理" C="true" R="true" U="true" D="true"/> <Acl module="图书管理" C="true" R="true" U="true" D="true"/> <Acl module="消息管理" C="true" R="true" U="true" D="true"/> <Acl module="收件箱" C="true" R="true" U="true" D="true"/> <Acl module="发件箱" C="true" R="true" U="true" D="true"/> <Acl module="垃圾箱" C="true" R="true" U="true" D="true"/> <Acl module="聊天记录" C="true" R="true" U="true" D="true"/> <Acl module="工作流程" C="true" R="true" U="true" D="true"/> <Acl module="流程管理" C="true" R="true" U="true" D="true"/> <Acl module="表单定义" C="true" R="true" U="true" D="true"/> <Acl module="组织管理" C="true" R="true" U="true" D="true"/> <Acl module="机构管理" C="true" R="true" U="true" D="true"/> <Acl module="人员管理" C="true" R="true" U="true" D="true"/> <Acl module="权限管理" C="true" R="true" U="true" D="true"/> <Acl module="模块管理" C="true" R="true" U="true" D="true"/> <Acl module="角色管理" C="true" R="true" U="true" D="true"/> <Acl module="用户管理" C="true" R="true" U="true" D="true"/> <Acl module="系统管理" C="true" R="true" U="true" D="true"/> <Acl module="密码修改" C="true" R="true" U="true" D="true"/> <Acl module="代码定义" C="true" R="true" U="true" D="true"/> <Acl module="系统初始化" C="true" R="true" U="true" D="true"/> <Acl module="人事档案" C="true" R="true" U="true" D="true"/> <Acl module="人员履历" C="true" R="true" U="true" D="true"/> <Acl module="转正申请" C="true" R="true" U="true" D="true"/> <Acl module="离职申请" C="true" R="true" U="true" D="true"/> <Acl module="员工考勤" C="true" R="true" U="true" D="true"/> </Role> <Role name="普通员工"> <Acl module="个人办公" C="true" R="true" U="true" D="true"/> <Acl module="我的办公桌" C="true" R="true" U="true" D="true"/> <Acl module="我的便签" C="true" R="true" U="true" D="true"/> <Acl module="我的任务" C="true" R="true" U="true" D="true"/> <Acl module="通信录" C="true" R="true" U="true" D="true"/> <Acl module="公文管理" C="true" R="true" U="true" D="true"/> <Acl module="公文维护" C="true" R="true" U="true" D="true"/> <Acl module="归档处理" C="true" R="true" U="true" D="true"/> <Acl module="公共信息" C="true" R="true" U="true" D="true"/> <Acl module="信息管理" C="true" R="true" U="true" D="true"/> <Acl module="行政办公" C="true" R="true" U="true" D="true"/> <Acl module="会议管理" C="true" R="true" U="true" D="true"/> <Acl module="资产管理" C="true" R="true" U="true" D="true"/> <Acl module="用品管理" C="true" R="true" U="true" D="true"/> <Acl module="车辆管理" C="true" R="true" U="true" D="true"/> <Acl module="图书管理" C="true" R="true" U="true" D="true"/> <Acl module="消息管理" C="true" R="true" U="true" D="true"/> <Acl module="收件箱" C="true" R="true" U="true" D="true"/> <Acl module="发件箱" C="true" R="true" U="true" D="true"/> <Acl module="垃圾箱" C="true" R="true" U="true" D="true"/> <Acl module="聊天记录" C="true" R="true" U="true" D="true"/> </Role> <Role name="部门领导"> <Acl module="个人办公" C="true" R="true" U="true" D="true"/> <Acl module="我的办公桌" C="true" R="true" U="true" D="true"/> <Acl module="我的便签" C="true" R="true" U="true" D="true"/> <Acl module="我的任务" C="true" R="true" U="true" D="true"/> <Acl module="通信录" C="true" R="true" U="true" D="true"/> <Acl module="公文管理" C="true" R="true" U="true" D="true"/> <Acl module="公文维护" C="true" R="true" U="true" D="true"/> <Acl module="归档处理" C="true" R="true" U="true" D="true"/> <Acl module="公共信息" C="true" R="true" U="true" D="true"/> <Acl module="信息管理" C="true" R="true" U="true" D="true"/> <Acl module="行政办公" C="true" R="true" U="true" D="true"/> <Acl module="会议管理" C="true" R="true" U="true" D="true"/> <Acl module="资产管理" C="true" R="true" U="true" D="true"/> <Acl module="用品管理" C="true" R="true" U="true" D="true"/> <Acl module="车辆管理" C="true" R="true" U="true" D="true"/> <Acl module="图书管理" C="true" R="true" U="true" D="true"/> <Acl module="消息管理" C="true" R="true" U="true" D="true"/> <Acl module="收件箱" C="true" R="true" U="true" D="true"/> <Acl module="发件箱" C="true" R="true" U="true" D="true"/> <Acl module="垃圾箱" C="true" R="true" U="true" D="true"/> <Acl module="聊天记录" C="true" R="true" U="true" D="true"/> <Acl module="工作流程" C="true" R="true" U="true" D="true"/> <Acl module="流程管理" C="true" R="true" U="true" D="true"/> <Acl module="表单定义" C="true" R="true" U="true" D="true"/> <Acl module="组织管理" C="true" R="true" U="true" D="true"/> <Acl module="机构管理" C="true" R="true" U="true" D="true"/> <Acl module="人员管理" C="true" R="true" U="true" D="true"/> <Acl module="权限管理" C="true" R="true" U="true" D="true"/> <Acl module="模块管理" C="true" R="true" U="true" D="true"/> <Acl module="角色管理" C="true" R="true" U="true" D="true"/> <Acl module="用户管理" C="true" R="true" U="true" D="true"/> <Acl module="系统管理" C="true" R="true" U="true" D="true"/> <Acl module="密码修改" C="true" R="true" U="true" D="true"/> <Acl module="代码定义" C="true" R="true" U="true" D="true"/> <Acl module="系统初始化" C="true" R="true" U="true" D="true"/> <Acl module="人事档案" C="true" R="true" U="true" D="true"/> <Acl module="人员履历" C="true" R="true" U="true" D="true"/> <Acl module="转正申请" C="true" R="true" U="true" D="true"/> <Acl module="离职申请" C="true" R="true" U="true" D="true"/> <Acl module="员工考勤" C="true" R="true" U="true" D="true"/> </Role> <Role name="总经理"> <Acl module="个人办公" C="true" R="true" U="true" D="true"/> <Acl module="我的办公桌" C="true" R="true" U="true" D="true"/> <Acl module="我的便签" C="true" R="true" U="true" D="true"/> <Acl module="我的任务" C="true" R="true" U="true" D="true"/> <Acl module="通信录" C="true" R="true" U="true" D="true"/> <Acl module="公文管理" C="true" R="true" U="true" D="true"/> <Acl module="公文维护" C="true" R="true" U="true" D="true"/> <Acl module="归档处理" C="true" R="true" U="true" D="true"/> <Acl module="公共信息" C="true" R="true" U="true" D="true"/> <Acl module="信息管理" C="true" R="true" U="true" D="true"/> <Acl module="行政办公" C="true" R="true" U="true" D="true"/> <Acl module="会议管理" C="true" R="true" U="true" D="true"/> <Acl module="资产管理" C="true" R="true" U="true" D="true"/> <Acl module="用品管理" C="true" R="true" U="true" D="true"/> <Acl module="车辆管理" C="true" R="true" U="true" D="true"/> <Acl module="图书管理" C="true" R="true" U="true" D="true"/> <Acl module="消息管理" C="true" R="true" U="true" D="true"/> <Acl module="收件箱" C="true" R="true" U="true" D="true"/> <Acl module="发件箱" C="true" R="true" U="true" D="true"/> <Acl module="垃圾箱" C="true" R="true" U="true" D="true"/> <Acl module="聊天记录" C="true" R="true" U="true" D="true"/> <Acl module="工作流程" C="true" R="true" U="true" D="true"/> <Acl module="流程管理" C="true" R="true" U="true" D="true"/> <Acl module="表单定义" C="true" R="true" U="true" D="true"/> <Acl module="组织管理" C="true" R="true" U="true" D="true"/> <Acl module="机构管理" C="true" R="true" U="true" D="true"/> <Acl module="人员管理" C="true" R="true" U="true" D="true"/> <Acl module="权限管理" C="true" R="true" U="true" D="true"/> <Acl module="模块管理" C="true" R="true" U="true" D="true"/> <Acl module="角色管理" C="true" R="true" U="true" D="true"/> <Acl module="用户管理" C="true" R="true" U="true" D="true"/> <Acl module="系统管理" C="true" R="true" U="true" D="true"/> <Acl module="密码修改" C="true" R="true" U="true" D="true"/> <Acl module="代码定义" C="true" R="true" U="true" D="true"/> <Acl module="系统初始化" C="true" R="true" U="true" D="true"/> <Acl module="人事档案" C="true" R="true" U="true" D="true"/> <Acl module="人员履历" C="true" R="true" U="true" D="true"/> <Acl module="转正申请" C="true" R="true" U="true" D="true"/> <Acl module="离职申请" C="true" R="true" U="true" D="true"/> <Acl module="员工考勤" C="true" R="true" U="true" D="true"/> </Role> <Role name="档案管理员"> <Acl module="个人办公" C="true" R="true" U="true" D="true"/> <Acl module="我的办公桌" C="true" R="true" U="true" D="true"/> <Acl module="我的便签" C="true" R="true" U="true" D="true"/> <Acl module="我的任务" C="true" R="true" U="true" D="true"/> <Acl module="通信录" C="true" R="true" U="true" D="true"/> <Acl module="公文管理" C="true" R="true" U="true" D="true"/> <Acl module="归档处理" C="true" R="true" U="true" D="true"/> <Acl module="消息管理" C="true" R="true" U="true" D="true"/> <Acl module="收件箱" C="true" R="true" U="true" D="true"/> <Acl module="发件箱" C="true" R="true" U="true" D="true"/> <Acl module="垃圾箱" C="true" R="true" U="true" D="true"/> <Acl module="聊天记录" C="true" R="true" U="true" D="true"/> </Role> </Roles> <Organizations> <Org name="总公司"> <Org name="总裁办"/> <Org name="行政部"/> <Org name="财务部"/> </Org> <Org name="北京分公司"> <Person name="陈十" username="cs" password="cs" roles="总经理"/> <Org name="办公室"> <Person name="诸一一" username="zyy" password="zyy" roles="部门领导"/> <Person name="王八" username="wb" password="wb" roles="档案管理员"/> </Org> <Org name="造价咨询部"/> <Org name="财务部"> <Person name="卫一二" username="wye" password="wye" roles="部门领导"/> </Org> <Org name="招标代理部"/> <Org name="软件开发部"> <Person name="冯九" username="fj" password="fj" roles="部门领导"/> <Org name="OA项目组"/> <Org name="CRM项目组"/> <Org name="烟草行业项目组"> <Person name="钱二" username="qe" password="qe" roles="部门领导"/> <Person name="孙三" username="ss" password="ss" roles="普通员工"/> <Person name="李四" username="ls" password="ls" roles="普通员工"/> <Person name="周五" username="zw" password="zw" roles="普通员工"/> <Person name="吴六" username="wl" password="wl" roles="普通员工"/> <Person name="郑七" username="zq" password="zq" roles="普通员工"/> </Org> </Org> <Org name="市场部"/> <Org name="技术服务部"> <Person name="赵一" username="zy" password="zy" roles="系统管理员"/> <Person name="蒋一三" username="jys" password="jys" roles="普通员工"/> <Person name="沈一四" username="sys" password="sys" roles="普通员工"/> <Person name="韩一五" username="hyw" password="hyw" roles="普通员工"/> <Person name="杨一六" username="yyl" password="yyl" roles="普通员工,系统管理员"/> </Org> </Org> <Org name="上海分公司"> <Org name="上海研发中心"></Org> <Org name="销售部"></Org> </Org> <Org name="广州分公司"> <Org name="广州研发中心"></Org> </Org> </Organizations> </InitDatas> 使用测试方法初始化数据: import junit.framework.TestCase; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.oa.manager.InitSystemDatas; public class InitDatasTest extends TestCase { private static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml"); public void initDatas() { InitSystemDatas init = (InitSystemDatas) factory.getBean("InitSystemDatas"); init.addOrUpdateInitDatas("init_datas.xml"); } }