基于SpringAop的热插拔异常捕获方法及装置制造方法及图纸

技术编号:24937522 阅读:36 留言:0更新日期:2020-07-17 20:50
本发明专利技术提供了一种基于SpringAop的热插拔异常捕获方法及装置,通过基于SpringAop定义的切面配置类使用execution表达式匹配第一程序项目中的方法,在检测到第一程序项目中的目标方法存在异常时,在第二程序项目中创建目标方法发生异常后的处理类并进行压缩得到压缩文件。将压缩文件上传至服务器,并将压缩文件的类名、压缩文件在服务器中的保存位置信息以及目标方法的execution表达式存入预设数据库。通过虚拟机加载保存位置信息,并将压缩文件的类名进行实例化得到实例化对象。基于目标方法的execution表达式将实例化对象与目标方法关联,以对目标方法进行拦截。如此,通过远程获取压缩文件并动态注入到第一程序项目中,能够实现动态异常捕获并处理以提高程序处理异常的能力。

【技术实现步骤摘要】
基于SpringAop的热插拔异常捕获方法及装置
本专利技术涉及程序异常检测
,具体而言,涉及一种基于SpringAop的热插拔异常捕获方法及装置。
技术介绍
计算机程序在运行过程中可能会出现异常。在程序出现不可预知的异常时,会导致程序中断。常见的异常捕获方法是通过对代码进行硬编码,在有可能出现异常的地方进行try/catch异常捕获。然而这种采用硬编码的方式进行异常捕获时,会导致程序中断,在通过修复代码对程序的异常情况进行修复后,还需要进行版本发布,这样会耗费较多的时间成本。
技术实现思路
为了改善上述问题,本专利技术提供了一种基于SpringAop的热插拔异常捕获方法及装置。本专利技术实施例的第一方面,提供了一种基于SpringAop的热插拔异常捕获方法,所述方法包括:定义基于SpringAop的切面配置类,通过所述切面配置类使用execution表达式匹配第一程序项目中的方法;检测所述第一程序项目中的方法是否存在异常;在检测到所述第一程序项目中的目标方法存在异常时,在第二程序项目中创建所述目标方法发生异常后的处理类;将所述处理类进行压缩,得到压缩文件;将所述压缩文件上传至服务器,并将所述压缩文件的类名、所述压缩文件在服务器中的保存位置信息以及所述目标方法的execution表达式存入预设数据库;通过虚拟机将所述预设数据库中的所述保存位置信息进行加载,并将所述预设数据库中的所述压缩文件的类名进行实例化得到实例化对象;基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联,以对所述目标方法进行拦截。可选地,通过虚拟机将所述预设数据库中的所述保存位置信息进行加载,包括:通过所述虚拟机从所述预设数据库中获取所述保存位置信息;通过所述虚拟机进行反射,得到URLClassLoader的addURL方法,采用所述addURL方法将所述保存位置信息添加到ClassLoader中。可选地,通过所述虚拟机进行反射,得到URLClassLoader的addURL方法,包括:根据获取到的所述保存位置信息并实例化File对象;判断预设的类加载器中是否存在所述File对象的类;若不存在,则通过URLClassLoader.class.getDeclaredMethod("addURL",newClass[]{URL.class})得到所述addURL方法。可选地,将所述预设数据库中的所述压缩文件的类名进行实例化得到实例化对象,包括:获取所述预设数据库中的所述压缩文件的类名;通过所述ClassLoader实例的loadClass()方法获取所述压缩文件的类名的实例化对象。可选地,在基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联的步骤之前,所述方法还包括:通过所述虚拟机使用Advice.class.isAssignableFrom()判断所述实例化对象是否继承自Advice;若是,则获取实例EhObject。可选地,基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联,以对所述目标方法进行拦截,包括:从所述预设数据库中获取所述目标方法的execution表达式,得到表达式executionJarA;创建AspectJExpressionPointcutAdvisor实例对象,得到对象AepObject;调用AepObject.setExpression(executionJarA)方法,以及AepObject.setAdvice(EhObject),将所述表达式executionJarA与所述对象AepObject进行关联;通过applicationContext.getBeanDefinitionNames()方法得到实例名称name,调用applicationContext.getBean(name)得到该对象,查找类型为Advised的目标对象;调用所述目标对象的addAdvisor方法将所述对象AepObject添加到Advised中。本专利技术实施例的第二方面,提供了一种基于SpringAop的热插拔异常捕获装置,所述装置包括:方法匹配模块,用于定义基于SpringAop的切面配置类,通过所述切面配置类使用execution表达式匹配第一程序项目中的方法;异常检测模块,用于检测所述第一程序项目中的方法是否存在异常;处理压缩模块,用于在检测到所述第一程序项目中的目标方法存在异常时,在第二程序项目中创建所述目标方法发生异常后的处理类;将所述处理类进行压缩,得到压缩文件;文件上传模块,用于将所述压缩文件上传至服务器,并将所述压缩文件的类名、所述压缩文件在服务器中的保存位置信息以及所述目标方法的execution表达式存入预设数据库;对象实例模块,用于通过虚拟机将所述预设数据库中的所述保存位置信息进行加载,并将所述预设数据库中的所述压缩文件的类名进行实例化得到实例化对象;异常拦截模块,用于基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联,以对所述目标方法进行拦截。可选地,对象实例模块,用于:通过所述虚拟机从所述预设数据库中获取所述保存位置信息;通过所述虚拟机进行反射,得到URLClassLoader的addURL方法,采用所述addURL方法将所述保存位置信息添加到ClassLoader中;其中,对象实例模块,进一步用于:根据获取到的所述保存位置信息并实例化File对象;判断预设的类加载器中是否存在所述File对象的类;若不存在,则通过URLClassLoader.class.getDeclaredMethod("addURL",newClass[]{URL.class})得到所述addURL方法。可选地,对象实例模块,用于:获取所述预设数据库中的所述压缩文件的类名;通过所述ClassLoader实例的loadClass()方法获取所述压缩文件的类名的实例化对象;其中,对象实例模块,还用于:通过所述虚拟机使用Advice.class.isAssignableFrom()判断所述实例化对象是否继承自Advice;若是,则获取实例EhObject。可选地,异常拦截模块,用于:从所述预设数据库中获取所述目标方法的execution表达式,得到表达式executionJarA;创建AspectJExpressionPointcutAdvisor实例对象,得到对象AepObject;调用AepObject.setExpression(executionJarA)方法,以及AepObject.setAdvice(EhObject),将所述表达式executionJarA与所述对象本文档来自技高网...

【技术保护点】
1.一种基于SpringAop的热插拔异常捕获方法,其特征在于,所述方法包括:/n定义基于SpringAop的切面配置类,通过所述切面配置类使用execution表达式匹配第一程序项目中的方法;/n检测所述第一程序项目中的方法是否存在异常;/n在检测到所述第一程序项目中的目标方法存在异常时,在第二程序项目中创建所述目标方法发生异常后的处理类;将所述处理类进行压缩,得到压缩文件;/n将所述压缩文件上传至服务器,并将所述压缩文件的类名、所述压缩文件在服务器中的保存位置信息以及所述目标方法的execution表达式存入预设数据库;/n通过虚拟机将所述预设数据库中的所述保存位置信息进行加载,并将所述预设数据库中的所述压缩文件的类名进行实例化得到实例化对象;/n基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联,以对所述目标方法进行拦截。/n

【技术特征摘要】
1.一种基于SpringAop的热插拔异常捕获方法,其特征在于,所述方法包括:
定义基于SpringAop的切面配置类,通过所述切面配置类使用execution表达式匹配第一程序项目中的方法;
检测所述第一程序项目中的方法是否存在异常;
在检测到所述第一程序项目中的目标方法存在异常时,在第二程序项目中创建所述目标方法发生异常后的处理类;将所述处理类进行压缩,得到压缩文件;
将所述压缩文件上传至服务器,并将所述压缩文件的类名、所述压缩文件在服务器中的保存位置信息以及所述目标方法的execution表达式存入预设数据库;
通过虚拟机将所述预设数据库中的所述保存位置信息进行加载,并将所述预设数据库中的所述压缩文件的类名进行实例化得到实例化对象;
基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联,以对所述目标方法进行拦截。


2.根据权利要求1所述的热插拔异常捕获方法,其特征在于,通过虚拟机将所述预设数据库中的所述保存位置信息进行加载,包括:
通过所述虚拟机从所述预设数据库中获取所述保存位置信息;
通过所述虚拟机进行反射,得到URLClassLoader的addURL方法,采用所述addURL方法将所述保存位置信息添加到ClassLoader中。


3.根据权利要求2所述的热插拔异常捕获方法,其特征在于,通过所述虚拟机进行反射,得到URLClassLoader的addURL方法,包括:
根据获取到的所述保存位置信息并实例化File对象;
判断预设的类加载器中是否存在所述File对象的类;
若不存在,则通过URLClassLoader.class.getDeclaredMethod("addURL",newClass[]{URL.class})得到所述addURL方法。


4.根据权利要求3所述的热插拔异常捕获方法,其特征在于,将所述预设数据库中的所述压缩文件的类名进行实例化得到实例化对象,包括:
获取所述预设数据库中的所述压缩文件的类名;
通过所述ClassLoader实例的loadClass()方法获取所述压缩文件的类名的实例化对象。


5.根据权利要求4所述的热插拔异常捕获方法,其特征在于,在基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联的步骤之前,所述方法还包括:
通过所述虚拟机使用Advice.class.isAssignableFrom()判断所述实例化对象是否继承自Advice;若是,则获取实例EhObject。


6.根据权利要求5所述的热插拔异常捕获方法,其特征在于,基于所述目标方法的execution表达式将所述实例化对象与所述目标方法关联,以对所述目标方法进行拦截,包括:
从所述预设数据库中获取所述目标方法的execution表达式,得到表达式executionJarA;
创建AspectJExpressionPointcutAdvisor实例对象,得到对象AepObject;
调用AepObject.setExpression(executionJarA)方法,以及
AepObject.setAdvice(EhObject),将所述表达式executionJarA与所述对象AepObject进行关联;
通过applicationContext.getBeanDefinitionNames()方法得到实例名称name,调用applicationContext.getBean(...

【专利技术属性】
技术研发人员:顾凌云郭志攀王伟孙川
申请(专利权)人:上海冰鉴信息科技有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1