• 系统扩展性之引入外部包


    系统扩展性之引入外部包

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

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

    就是模块 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方式,待续...

    喜欢关注一下,不喜欢点评一下
  • 相关阅读:
    C# 中的委托和事件
    sql笔记-group by 统计功能
    js,css小知识点记录
    sql小技巧
    《孙子兵法》总结
    .Net深复制、浅复制
    《君主论》
    php邮箱找回密码功能
    后台管理员账号不能同时登陆,以及登陆使对方强制下线功能
    好程序员应该读的30本书
  • 原文地址:https://www.cnblogs.com/chengmuyu/p/15151303.html
Copyright © 2020-2023  润新知