1.概要
springboot 的程序一般打包程成jar包。我們有些情況下,我們需要對程序進行擴展,我們沒辦法對已打包的程序進行修改。
我們希望的做法是:
1.將我們的一些接口打包。
2.在擴展包時,我們引入接口包。
3.實現接口后,打成JAR包。
4.動態加載這些jar包,讓后將我們的類動態注冊到spring容器中。
2.實現過程
2.1 定義接口
package com.redxun.handler; public interface IDemoHandler { String handler(String name); }
我們將這個接口打包。
2.2 實現接口
<dependency> <groupId>org.redxun</groupId> <artifactId>interface</artifactId> <version>1.0</version> </dependency>
引入接口包
package com.example.demo; import com.redxun.handler.IDemoHandler; public class DemoHandler implements IDemoHandler { @Override public String handler(String s) { System.err.println("hello world"); return "hello:" +s; } }
實現接口。
2.3 動態加載JAR包
@RestController @RequestMapping("/user/org/osUser") public class DemoController { @GetMapping(value = "loadClass") public String loadClass() throws ClassNotFoundException { String pluginClass="com.example.demo.DemoHandler"; ClassLoader classLoader = ClassLoaderUtil.getClassLoader("file:/D:/demo-1.0.jar"); Class<?> clazz = classLoader.loadClass(pluginClass); SpringUtil.registerBean("demoHandler",clazz); IDemoHandler plugin = (IDemoHandler)SpringUtil.getBean("demoHandler"); String str= plugin.handler("RAY"); return str; } }
這樣我們就實現了動態擴展,使用這種方式,我們就可以使用插件的方式對我們的微服務應用進行擴展