一种解除功能模块依赖的内部调用方法技术

技术编号:32817497 阅读:14 留言:0更新日期:2022-03-26 20:14
本发明专利技术公开一种解除功能模块依赖的内部调用方法,构建一个内部调用模块,将功能模块与业务模块通过内部调用模块通信连接。本发明专利技术通过在功能模块与业务模块之间增设内部调用模块,实现功能模块与业务模块之间的依赖关系解除,同时还可以保证业务模块可以对功能模块的调用。的调用。的调用。

【技术实现步骤摘要】
一种解除功能模块依赖的内部调用方法


[0001]本专利技术涉及软件架构、功能实现、代码复用
具体地说是一种解除功能模块依赖的内部调用方法。

技术介绍

[0002]使用java语言基于spring框架开发应用时,通常使用模块化程序设计来完成应用开发。功能模块简单来书是指数据说明、可执行语句等程序元素的集合,它是指单独命名的可通过名字来访问的过程、函数、子程序或宏调用。功能模块化是将程序划分成若干个功能模块,每个功能模块完成了一个子功能,并在这些模块之间建立必要的联系,通过模块的互相协作完成整个功能的程序设计方法,以满足所要求的整个应用的功能。
[0003]模块化程序设计有很多优点,但相对的,对模块的独立、规模、层次等分解也会有很大难度。普遍的是,一个功能模块在功能设计上是独立的,但在开发和使用中会依赖很多其它功能模块,从而导致开发与测试困难。单体应用随着体量原来越大,功能模块越来越多,功能模块的耦合严重、可靠性差等问题也开始显现出来。
[0004]应用设计时,在应用场景固定的情况下,结合用户量、数据量等因素,从而选择使用单体或者分布式的架构,但以产品的形式是无法满足的。因为产品开发完成后,功能是固定的,但是客户的情况是不固定的,从而导致用户量、数据量等因素也不固定。此时我们无法选择将应用以单体或微服务的方式开发与部署。

技术实现思路

[0005]为此,本专利技术所要解决的技术问题在于提供一种解除功能模块依赖的内部调用方法,通过在功能模块与业务模块之间增设内部调用模块,实现功能模块与业务模块之间的依赖关系解除,同时还可以保证业务模块可以对功能模块的调用。
[0006]为解决上述技术问题,本专利技术提供如下技术方案:一种解除功能模块依赖的内部调用方法,构建一个内部调用模块,将功能模块与业务模块通过内部调用模块通信连接。
[0007]上述解除功能模块依赖的内部调用方法,构建一个启动模块,将所有功能模块或上述功能模块使用时所属依赖的方法引入启动模块内,将启动模块与内部调用模块通信连接。
[0008]上述解除功能模块依赖的内部调用方法,在内部调用模块内进行如下处理:a1)创建在启动类上使用的开启内部调节用注解,所述开启内部调节用注解用于控制是否开启内部调用方法;a2) 创建作用在接口上的声明内部调用接口注解,声明内部调用接口注解至少包括真实调用对象的类全限定名;a3)创建FactoryBean接口的实现类;在FactoryBean接口的实现类中,FactoryBean接口用于返回一个与一个被声明内部调用接口注解的接口相关的实例,该实
例包括真实调用对象的类的全限定名和内部调用接口的默认实现类;a4)创建InvocationHandler的实现类;a5)创建内部调用注册器。
[0009]上述解除功能模块依赖的内部调用方法,使用时,通过@Autowired或@Resource的注解将接口的代理对象注入功能模块业务类中;当在功能模块业务类中执行代理对象的方法时,执行InvocationHandler的实现类的invoke方法,通过从Spring context中获取的实例或默认实现类创建的实例的对应方法,实现解除对功能模块的依赖。
[0010]上述解除功能模块依赖的内部调用方法,通过从Spring context中获取的实例或默认实现类创建的实例实现解除对功能模块的依赖具体操作为:通过方法名与参数查找真实对象中的方法,执行并返回结果。
[0011]上述解除功能模块依赖的内部调用方法,通过从Spring context中获取的实例或默认实现类创建的实例实现解除对功能模块的依赖的具体步骤如下:S1)启动业务模块中的Spring程序并通过Spring程序扫描内部调用模块中被@InnerClient注释过的接口;S2)当Spring程序扫描到一个被@InnerClient注释过的接口时,在内部调用注册器创建一个与该接口关联的BeanDefinition对象;S3)将步骤S2)中创建的BeanDefinition对象的beanClass属性设置为FactoryBean类型的一个子类,并将该接口的类型添加到BeanDefinition对象的type属性中,同时将@innerClient属性添加到BeanDefinition对象中与@innerClient属性相对应的属性中,@innerClient属性包括className、qualifier和fallback;S4)通过BeanDefinitionRegistry对象将经过步骤S3)处理后的BeanDefinition对象注册到Spring context中并由Spring对BeanDefinition对象进行维护,BeanDefinitionRegistry对象由Spring框架提供;S5)在其他Bean中注入该接口时,通过调用FactoryBean的getBoject方法并根据BeanDefinition对象的type属性生成一个该接口的代理对象,然后返回;S6)当Spring程序调用该接口的方法时,Spring程序调用的该接口的方法为该接口的代理对象的方法,Spring程序调用该接口的方法所使用的方法为invoke方法,在invoke方法中,通过className从Spring容器中获取对应的Bean,如果没有,则使用fallback属性创建一个与该接口关联的真实对象,通过方法名与参数查找真实对象中的方法,执行并返回结果。
[0012]上述解除功能模块依赖的内部调用方法,在步骤S2)中,声明内部调用接口注解还包括内部调用接口的别名和调用接口的默认实现类;当通过真实调用对象的类的全限定名找不到对应的实例时,则通过调用接口的默认实现类查找真实调用对象的类的对应的实例。
[0013]上述解除功能模块依赖的内部调用方法,在执行所述对应方法前,需进行一个查找过程,确保接口中声明的方法与形参和被调用实例中声明的方法的方法名和形参一致。
[0014]本专利技术的技术方案取得了如下有益的技术效果:在使用java语言基于spring框架,以模块化程序设计来完成应用开发的情况下,开发中的功能模块无需等待依赖的功能模块完成后开发;功能模块无需依赖其它模块进行
运行与测试;功能模块爆发式增长时,不会导致依赖混乱;功能模块完全独立使用,可以轻松复用;功能作为一个微服务运行。
附图说明
[0015]图1为解除功能模块依赖的内部调用方法原理图。
[0016]图2为解除功能模块依赖的内部调用方法流程图。
具体实施方式
[0017]程序模块化具有可以控制程序设计的复杂性、提高代码的重用性、易于维护和功能扩充、有利于团队开发的优点,但一个功能模块在功能设计上是独立的,但在开发和使用中会依赖很多其它功能模块,从而导致开发与测试困难。
[0018]为了不影响软件开发与测试或降低对软件开发与测试的影响,通常需要将一个功能模块与其他功能模块解除依赖。本专利技术解除功能模块依赖的内部调用方法,通过构建一个内部调用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种解除功能模块依赖的内部调用方法,其特征在于,构建一个内部调用模块,将功能模块与业务模块通过内部调用模块通信连接。2.根据权利要求1所述的解除功能模块依赖的内部调用方法,其特征在于,构建一个启动模块,将所有功能模块或上述功能模块使用时所属依赖的方法引入启动模块内,将启动模块与内部调用模块通信连接。3.根据权利要求2所述的解除功能模块依赖的内部调用方法,其特征在于,在内部调用模块内进行如下处理:a1)创建在启动类上使用的开启内部调节用注解,所述开启内部调节用注解用于控制是否开启内部调用方法;a2) 创建作用在接口上的声明内部调用接口注解,声明内部调用接口注解至少包括真实调用对象的类全限定名;a3)创建FactoryBean接口的实现类;在FactoryBean接口的实现类中,FactoryBean接口用于返回一个与一个被声明内部调用接口注解的接口相关的实例,该实例包括真实调用对象的类的全限定名和内部调用接口的默认实现类;a4)创建InvocationHandler的实现类;a5)创建内部调用注册器。4.根据权利要求3所述的解除功能模块依赖的内部调用方法,其特征在于,使用时,通过@Autowired或@Resource的注解将接口的代理对象注入功能模块业务类中;当在功能模块业务类中执行代理对象的方法时,执行InvocationHandler的实现类的invoke方法,通过从Spring context中获取的实例或默认实现类创建的实例的对应方法,实现解除对功能模块的依赖。5.根据权利要求4所述的解除功能模块依赖的内部调用方法,其特征在于,通过从Spring context中获取的实例或默认实现类创建的实例实现解除对功能模块的依赖具体操作为:通过方法名与参数查找真实对象中的方法,执行并返回结果。6.根据权利要求5所述的解除功能模块依赖的内部调用方法,其特征在于,通过从Spring context中获取的实例或默认实现类创建的实例实现解除对功能模块的依赖的具体步骤如下:S1)启动业务模块中的Spring程序并通过Spring程序扫描内部调用模块中被@InnerClient注释过的接口;S2)当Spring程序扫描...

【专利技术属性】
技术研发人员:王帅张大伟
申请(专利权)人:北京安盟信息技术股份有限公司
类型:发明
国别省市:

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

1