项目需求:excel导入时需要对数据校验,校验规则很多而且后期可能会不断增加,使用的校验规则可以导入之前任意勾选,所以对每一个校验规则都拆分成了独立的类,他们都实现了同一个校验接口。由于校验规则文件可能后期不断增加,如果这些校验文件放到项目路径下,则每次增加校验文件都需要重新打war包部署项目,比较麻烦,为了后期方便维护需要把这些校验文件放到项目外部,先把这些校验文件按照原来的包结构打为jar包,然后在项目中加载,通过反射实例化并调用校验方法进行校验,这样以后新增校验文件,只需要重新打个jar包,把jar放到指定的路径下就可以了,不需要重新部署项目。
原来做法:校验文件都放在com.asdf.qwer.zxcv.checkrule项目文件夹下,可以通过过(ICheckRule)Class.forName("com.asdf.qwer.zxcv.checkrule.CheckRule_1").newInstance()进行实例化并强转为接口类型,然后调用校验方法进行校验。
现在做法:com.asdf.qwer.zxcv.checkrule项目文件夹下所有的校验文件的Class文件按照目录结构打jar包,即删掉所有不需要的Class后把整个com文件夹打jar,找到com文件夹位置并打开命令行窗口,命令jar cvf check.jar com。
关键代码:由于jar包是按照原来的目录结构进行打包的,所以实例化时和Class.forName("com.asdf.qwer.zxcv.checkrule.CheckRule_1").newInstance()是一样的,使用原来的全限定路径名。