加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 隐藏服务实现的最佳实践

发布时间:2020-12-14 19:36:04 所属栏目:Java 来源:网络整理
导读:我想隐藏API用户的服务(接口)的实现(具体类).该实现由使用 Java API ServiceLoader机制的工厂提供给用户.此Loader要求实现类具有公共可见性.只要实现隐藏在用户不直接依赖的不同JAR(除了API JAR之外),就可以了. 但是,为了便于分发,使用默认实现的JAR内容将打
我想隐藏API用户的服务(接口)的实现(具体类).该实现由使用 Java API ServiceLoader机制的工厂提供给用户.此Loader要求实现类具有公共可见性.只要实现隐藏在用户不直接依赖的不同JAR(除了API JAR之外),就可以了.

但是,为了便于分发,使用默认实现的JAR内容将打包到API JAR中.因此,用户有效地依赖于此预先打包的JAR,其中默认实现类可用于公共可见性.没有什么能阻止人们直接实例化实现.我不希望那是可能的.

我的坏主意:

>实现自己的ServiceLoader版本,允许加载包私有实现(顺便说一下,为什么Java API ServiceLoader不允许这样做?)
>发布单独的API和实现JAR

您认为正确的方法是什么?妥协吗?

使用OSGi或其他重型机械是不可能的.

解决方法

令人失望的是,但是:

>制作一个单独的罐子,并将其与其他第三方罐子放在一起.
>让安装程序/部署过程处理所有的包装.
>在编译期间不要使这个jar可用; maven:< scope> runtime< / scope>.

唯一的另一种方法是在javadoc中使用@Deprecated,并使用java服务API作为注释如何使用相应的类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读