最近有个需求:需要让现有springboot项目可以加载外部的jar包实现新增、更新接口逻辑。虽然和热部署不一样,但是从方案上可以借鉴,本文就是使用重载的方式,也就是只会更新扩展包里的资源。  先来一个自定义的模块类加载器 然后再来个加载mybatis的xml资源的类,本类解析xml部分是参考网上资料  上面需要注意的是,处理好xml还需要将XXMapper接口也放入spring容器中,但是接口是没办法直接转成spring的BeanDefinition的,因为接口没办法实例化,而BeanDefinition作为对象的模板,肯定不允许接口直接放进去,通过看mybatis-spring源码,可以看出这些接口都会被封装成MapperFactoryBean放入spring容器中实例化时就调用getObject方法生成Mapper的代理对象。只要不遇到final的属性,反射是万能的,哈哈!

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法

springboot运行时新增/更新外部接口的实现方法