一种代码编译方法及装置制造方法及图纸

技术编号:24852287 阅读:63 留言:0更新日期:2020-07-10 19:06
本申请提供了一种代码编译方法及装置,属于计算机技术领域。该方法中,获取待编译的事务源代码,其中,所述事务源代码中的非事务方法包含预设的注解信息;生成所述事务源代码对应的树形表达式;根据所述注解信息,在所述树形表达式中确定所述非事务方法,并根据预设的修改策略,在所述树形表达式中添加所述非事务方法对应的代理对象;对修改后的树形表达式进行编译,得到编译后的代码,所述编译后的代码中所述非事务方法由事务方法通过所述代理对象进行代理调用。以避免因没有通过代理对象调用非事务方法而导致数据发生错误的问题。

【技术实现步骤摘要】
一种代码编译方法及装置
本申请涉及计算机
,尤其涉及一种代码编译方法及装置。
技术介绍
在数据库中,通常是通过事务来实现对数据的读写操作。在执行一个事务的过程中,会依次调用多个属于不同类的方法(可称为事务方法),这些事务方法在程序代码中会通过代理对象(即具有代理调用功能的代码)进行调用。例如,在spring框架下是使用AOP方式实现的事务代理,一般是使用cglib或jdk代理实现。每调用一个事务方法,会记录该事务方法的执行状态,比如成功或失败。当一个事务执行完成后,如果全部事务方法的执行状态都为成功,则该事务执行完成,保存当前数据库中的数据。如果存在执行状态为失败的事务方法,则该事务执行失败,进行数据回滚,也即,将数据库中的数据恢复至该执行该事务之前的数据。但是,事务中可能会存在同一个类中的多个方法相互调用的情况,此时,只有该类中第一个执行的方法为事务方法,其他方法(可称为非事务方法)由于与第一个方法属于同一类,则不会通过代理对象调用(即被调用方法不会被事务管理)。因此,如果某一非事务方法执行失败,则不会进行数据回滚,导致数据库中本文档来自技高网...

【技术保护点】
1.一种代码编译方法,其特征在于,所述方法包括:/n获取待编译的事务源代码,其中,所述事务源代码中的非事务方法包含预设的注解信息;/n生成所述事务源代码对应的树形表达式;/n根据所述注解信息,在所述树形表达式中确定所述非事务方法,并根据预设的修改策略,在所述树形表达式中添加所述非事务方法对应的代理对象;/n对修改后的树形表达式进行编译,得到编译后的代码,所述编译后的代码中所述非事务方法由事务方法通过所述代理对象进行代理调用。/n

【技术特征摘要】
1.一种代码编译方法,其特征在于,所述方法包括:
获取待编译的事务源代码,其中,所述事务源代码中的非事务方法包含预设的注解信息;
生成所述事务源代码对应的树形表达式;
根据所述注解信息,在所述树形表达式中确定所述非事务方法,并根据预设的修改策略,在所述树形表达式中添加所述非事务方法对应的代理对象;
对修改后的树形表达式进行编译,得到编译后的代码,所述编译后的代码中所述非事务方法由事务方法通过所述代理对象进行代理调用。


2.根据权利要求1所述的方法,其特征在于,所述生成所述事务源代码对应的树形表达式,包括:
将所述事务源代码输入至词法分析扫描器,输出所述事务源代码对应的一维数组;
将所述一维数组输入至语法分析解析器,输出所述事务源代码对应的树形表达式。


3.根据权利要求1所述的方法,其特征在于,所述根据所述注解信息,在所述树形表达式中确定所述非事务方法,并根据预设的修改策略,在所述树形表达式中添加所述非事务方法对应的代理对象,包括:
通过注解处理器,在所述树形表达式中确定包含所述注解信息的节点,作为所述非事务方法对应的节点;
针对每个非事务方法对应的节点,通过所述注解处理器在所述目标节点之前添加代理对象对应的节点。


4.根据权利要求1所述的方法,其特征在于,所述对修改后的树形表达式进行编译,包括:
通过注解处理器生成修改后的树形表达式对应的事务源代码,得到新事务源代码;
对所述新事务源代码进行编译。


5.一种代码编译装置,其特征在于,所述装置包括:
获取模块,用于获取待编译的事务源代码,其中,所述事务源代码中的非事务方法包含预设的注解信息;
生成模块...

【专利技术属性】
技术研发人员:艾国信宋超
申请(专利权)人:北京奇艺世纪科技有限公司
类型:发明
国别省市:北京;11

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

1