系统扩展性之引入外部包
为了支持系统的扩展性,很多时候我们会通过引入外部包来直接使用扩展外部属性,这样实现默认定义与自定义功能的兼容,实现软件的扩展性.这里罗列了几种常见的扩展方式:
声明包路径和类名,方法名,通过约定的方式来引入外部包.
就是模块 plan1 的实现方式.
这种方式会在目录结构中增加lib目录,专门存放外部依赖包,同时外部包的目录结构和类名,方法名可以提前约定好,这样就可以直接取值,来实现预定义和扩展定义的兼容.
缺点:缺少明确的包路径和类名,方法名约束,除非阅读外部依赖包的源码,不然无法知道对方的定义是否满足自己的需要;
通过声明接口,单独的扩展包里实现该接口
接口显示声明,只有实现该接口,同时实现类与接口包结构一致,spring bean声明进行bean创建和声明周期管理,实现bean的创建和注入;
- 整体结构如下:
outer:用于注入声明的接口
api:定义声明的接口
a,b:自定义扩展模块,实现api接口定义
outer中只需要引用api这个预定义接口接口访问到a,b中的自定义方法,实现功能的扩展
缺点:如果扩展包越来越多,整个项目会越来越大,部署时间会越长
- 服务运行方式
a. 打包
mvc clean package
b. 以outer的jar包为执行目录,将api,a,b的jar包放到lib目录下
c. 执行启动命令
java -cp outer-1.0-SNAPSHOT.jar -Dloader.path=./lib org.springframework.boot.loader.PropertiesLauncher
tip:
windows下执行可以在cmd或者git bash命令窗里执行,不要在powershell中执行,因为会提示找不到或无法加载主类,这个应该是-D参数未被识别的原因引起的