系统扩展性之引入外部包

系统扩展性之引入外部包

为了支持系统的扩展性,很多时候我们会通过引入外部包来直接使用扩展外部属性,这样实现默认定义与自定义功能的兼容,实现软件的扩展性.这里罗列了几种常见的扩展方式:

声明包路径和类名,方法名,通过约定的方式来引入外部包.

就是模块 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参数未被识别的原因引起的

spi方式,待续...

posted @ 2021-08-17 10:43  橙木鱼  阅读(83)  评论(0编辑  收藏  举报