java插件式开发_springboot插件化开发(⼀)
最近做了个有趣的事,今晚不想写代码,来记录⼀下,如果需要的⼈看见也算是功德⼀件。
可以先拉下来看看效果。
需求描述:产品被越来越多的⽤户使⽤,需求的差异也愈来愈⼤,为了适应不同⽤户的不同需求,将产品进⾏插件化升级。
⽬标:将项⽬拆分为主程序和插件,主程序感知不到插件的存在,插件作为独⽴的jar包放在某个位置。主程序启动时把所有需要的插件动态加载进来。开发插件与写主程序⽆异,主程序代码可以随时迁移到插件。
第⼀步:调研
最蛋疼的当然是依赖注⼊的问题啦。⾸要⽬标就是先解决插件中的类使⽤的主程序中由spring管理起来的类,以及插件中需要由spring管理起来的类的问题。
所以呢,先要看看spring是在什么时机进⾏bean的实例化的。
⼊⼝程序瞧⼀瞧,逻辑清晰,步骤写得清清楚楚(虽然不知道有什么⽤)。好吧,每⼀步的源码再瞧⼀瞧,
嘻嘻,看到了listener,那是不是这⾥留有扩展呢?(别问我为啥)⽹上查资料,发现⾃⼰可以注册listener,在spring初始化完成之前,写⼊⾃⼰的逻辑,美滋滋。
把类交托给spring管理应该没啥问题了
spring到底是干啥的接下来看看如何开发插件
要针对主程序进⾏开发,就要看看怎么能引⽤到主程序的资源了,我⽤的maven哈,打包插件
打出来的主程序,插件是引⽤不到主程序的类的。需要使⽤下⾯这个插件
插件开发应该没啥问题了
最后的问题就是主程序加载插件的问题
插件的类需要加载进主程序的classpath,可能部分类需要托管给spring管理,还有可能插件在spring初始化完成之后,⾃⼰进⾏初始化。
哇,好jr多的事。
思前想后,准备建⼀张插件表,其中配置插件的位置,插件的boot class,需要由spring管理的类的扫描路径。
主程序在启动时,读取插件表,加载打成jar包的插件,在spring初始化容器之前,根据扫描路径将需要由spring管理的类注册进BeanFactory,在spring初始化完成后,调⽤所有插件的boot class。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论