一种SpringBean组件ID冲突的解决方法和装置制造方法及图纸

技术编号:35927622 阅读:78 留言:0更新日期:2022-12-14 10:11
本发明专利技术涉及一种Spring Bean组件ID冲突的解决方法和装置,属于组件开发技术领域,解决了现有对Bean组件ID无法自动识别冲突以及无法灵活命名的问题。包括:执行命名生成器中的扫描程序,遍历项目目录下所有编译后文件,将文件目录和文件名拼装得到全限定类名放入子集中,将文件名及其对应的子集组成键值对放入类信息集合中;每次遍历将相同文件名对应的全限定类名放入同一个子集;遍历类信息集合,取出长度大于1的子集放入黑名单集合中;Spring加载Bean组件,执行命名生成器中的命名程序,当组件的全限定类名存在于黑名单集合中,且不存在于白名单集合中时,根据预设规则生成Bean组件ID。实现了主动识别和插拔式解决冲突Bean组件ID,覆盖面广,处理灵活。处理灵活。处理灵活。

【技术实现步骤摘要】
一种Spring Bean组件ID冲突的解决方法和装置


[0001]本专利技术涉及组件开发
,尤其涉及一种Spring Bean组件ID冲突的解决方法和装置。

技术介绍

[0002]为了解决系统过于庞大而不便于开发维护,通常都会将大系统拆分为多个微服务,或者是将单个应用拆分为多个模块多团队开发,在集成测试时再融合在一起,以便提高系统灵活性且节省机器资源。采用Spring框架开发,Bean组件的ID缺省根据类名生成,在这种开发分散、运行合并的模式下,不同目录下的同名类生成的Bean组件ID相同,导致冲突,影响程序正常运行。
[0003]Spring框架在处理有重名的Bean组件时缺省使用的是覆盖(override)方式,只有在执行方法时才会发现错误,虽然可以通过修改配置不采用覆盖方式,但也只是把报错提前在服务启动环节,最后还是需要根据报出的错误信息定位问题后,人工修改重名的Bean组件ID。
[0004]Spring原生框架支持对普通组件重写Bean组件命名生成器,但对类似于JPA(Java Persistence API,本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种Spring Bean组件ID冲突的解决方法,其特征在于,包括如下步骤:执行命名生成器中的扫描程序,获取项目目录下所有编译后文件;遍历所述编译后文件,获取文件目录和文件名,将所述文件目录和所述文件名拼装得到的全限定类名放入子集中,以及,将所述文件名及其对应的子集组成键值对放入类信息集合中;其中,每次遍历将相同文件名对应的全限定类名放入同一个子集;遍历所述类信息集合,取出长度大于1的子集放入黑名单集合中;Spring加载Bean组件,执行命名生成器中的命名程序,取出当前Bean组件的全限定类名,当所述Bean组件的全限定类名存在于所述黑名单集合中,且不存在于白名单集合中时,根据预设规则生成Bean组件ID。2.根据权利要求1所述的Spring Bean组件ID冲突的解决方法,其特征在于,所述命名生成器继承AnnotationBeanNameGenerator类,包括所述扫描程序和所述命名程序,其中:所述扫描程序存储在静态块中,当创建所述命名生成器实例时自动执行所述扫描程序,用来扫描所有编译后文件,生成所述黑名单集合和所述白名单集合;所述命名程序重写buildDefaultBeanName方法,用于识别Bean组件的ID是否冲突,对冲突的Bean组件根据所述预设规则生成Bean组件ID,其中所述预设规则是“beanId_全限定类名”。3.根据权利要求2所述的Spring Bean组件ID冲突的解决方法,其特征在于,所述命名生成器用于对XML配置方式和注解方式定义的组件进行扫描和命名,其中XML配置方式包括:<context:component

scan/>,<jpa:repositories/>,注解方式包括:@ComponentScan。4.根据权利要求3所述的Spring Bean组件ID冲突的解决方法,其特征在于,对所述XML配置方式,当Spring解析配置文件中的context和jpa标签时,根据spring.handlers文件中的配置,分别找到与标签命名空间相同的context标签处理器和jpa标签处理器,在context标签处理器和jpa标签处理器中的初始化方法中创建context扫描解析器和jpa扫描解析器,根据所述context扫描解析器和所述jpa扫描解析器中设置的命名生成器,创建所述命名生成器实例。5.根据权利要求3所述的Spring Bean组件ID冲突的解决方法,其特征在于,对所述注解方式,当Spring根据@ComponentScan扫描组件时,调用实现内置接口的动态组件注册器,在所述动态组件注册器中获取组件工厂后置处理器,创建所述命名生成器实例。6.根据权利要求1

5任一项所述的Spring Bean组件ID冲突的解决方法,其特征在于,所述黑名单集合中还包括通过读取预置的黑名单文件获得的黑名单;所述黑名单文件和所述白名单文件存放在项目META

INF文件夹下,文件内容支持全限定类名和末尾是*的通配符形式。7.根据权利要求1所述的Spring Bean组件ID冲突的解决方法,其特征在于,所述所有编译后文件,包括class文件和j...

【专利技术属性】
技术研发人员:蓝磊芳蔡博文
申请(专利权)人:远光软件股份有限公司
类型:发明
国别省市:

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

1