spring boot 插件化开发(一)

最近做了个有趣的事,今晚不想写代码,来记录一下,如果需要的人看见也算是功德一件。

github地址:https://github.com/zhengdaone/spring-plugin-cli

可以先拉下来看看效果。

需求描述:产品被越来越多的用户使用,需求的差异也愈来愈大,为了适应不同用户的不同需求,将产品进行插件化升级。

目标:将项目拆分为主程序和插件,主程序感知不到插件的存在,插件作为独立的jar包放在某个位置。主程序启动时把所有需要的插件动态加载进来。开发插件与写主程序无异,主程序代码可以随时迁移到插件。

第一步:调研

最蛋疼的当然是依赖注入的问题啦。首要目标就是先解决插件中的类使用的主程序中由spring管理起来的类,以及插件中需要由spring管理起来的类的问题。

所以呢,先要看看spring是在什么时机进行bean的实例化的。

入口程序瞧一瞧,逻辑清晰,步骤写得清清楚楚(虽然不知道有什么用)。好吧,每一步的源码再瞧一瞧,

嘻嘻,看到了listener,那是不是这里留有扩展呢?(别问我为啥)网上查资料,发现自己可以注册listener,在spring初始化完成之前,写入自己的逻辑,美滋滋。

把类交托给spring管理应该没啥问题了

接下来看看如何开发插件

要针对主程序进行开发,就要看看怎么能引用到主程序的资源了,我用的maven哈,打包插件

打出来的主程序,插件是引用不到主程序的类的。需要使用下面这个插件

插件开发应该没啥问题了

最后的问题就是主程序加载插件的问题

插件的类需要加载进主程序的classpath,可能部分类需要托管给spring管理,还有可能插件在spring初始化完成之后,自己进行初始化。

哇,好jr多的事。

思前想后,准备建一张插件表,其中配置插件的位置,插件的boot class,需要由spring管理的类的扫描路径。

主程序在启动时,读取插件表,加载打成jar包的插件,在spring初始化容器之前,根据扫描路径将需要由spring管理的类注册进BeanFactory,在spring初始化完成后,调用所有插件的boot class。

好了,完美计划,准备编码了!请参见:https://blog.csdn.net/ZhengDa_LY/article/details/84351202

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是指在Spring Boot项目中使用件机制来实现功能的扩展和灵活性的增强。 首先,Spring Boot提供了许多可扩展的接口和抽象类,如Starter、AutoConfiguration、CommandLineRunner等,通过这些接口和抽象类,我们可以定义自己的件,并将其集成到Spring Boot应用中。 其次,Spring Boot件机制可以通过依赖注入和自动配置实现。件的依赖可以通过在pom.xml文件中添加特定的依赖来实现。而自动配置则是通过在META-INF/spring.factories文件中注册相应的自动配置类来实现。当Spring Boot启动时,会根据这些自动配置类来进行相应的自动配置。 此外,Spring Boot还支持外部配置,也就是说可以将件的配置信息以外部的方式进行配置,如application.properties或application.yml文件。这样使得件的配置更加灵活和可扩展。 最后,Spring Boot还可以通过注解、AOP等方式来实现。通过在件中使用注解或AOP,可以将件的功能与Spring Boot应用的功能进行解耦,提高代码的可维护性和可测试性。 总之,Spring Boot通过提供可扩展的接口和抽象类、依赖注入和自动配置、外部配置以及注解、AOP等方式,使得件可以轻松地集成到Spring Boot应用中,实现对功能的扩展和灵活的增强。这种的机制提高了Spring Boot应用的可扩展性和可维护性,使得开发人员可以更加方便地开发和管理件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值