假設我們現在有發送短信和郵件的功能。這時候就需要增加壹個發送微信或者釘釘消息的功能。
我們希望這兩個部分與第三方功能的插件開發連接起來,是兩個獨立的罐子,各自負責自己的功能。
開發完成後,不需要重啟應用程序,只需要放在特定的位置,讓應用程序直接刷新加載這兩個jar即可。
其實是有方法的。我最近開發jvm-sandbox的時候,發現它有這樣壹個功能。
它是怎麽做到的?
給定壹個jar的路徑,然後掃描以jar結尾的包路徑。
這只是壹個示例版本。如果還想基於屬性註入,可以解綁評論片。
以上案例基於組件接口掃描,meta-INF \ services \ com . sandbox . manager . API . _ Components _中的實現類需要在jar中定義。例如
有困難的話可以用kohsuke包,在類上定義:(註意接口需要實現)就行了,不需要創建文件,手動實現。
Pom文件介紹:
GroupContainerHelper可以理解為壹個Map,前提是該屬性的對象存在於Map中,如果存在則賦值該對象。
功能差不多就是這樣實現的。如果是Spring,可以使用工廠解析SPI掃描的類。
當然,在後續的變現中,妳想怎麽玩就怎麽玩。
至於如何加載包或者刷新包,本文就不贅述了。
如果妳有好的辦法,也可以留言交流。