在
Java中定义库的公共接口有哪些选项.
例如,我经常发现事情是公开的,因为库中的另一个包需要它们(虽然仍然有一个共同的基础包,例如com.stackoverflow.mylib.),所以它们不能具有包访问级别,并且通常人们不会我想要大量的软件包(似乎人们使用Spring时仍然坚持使用单独的控制器/服务/模型/ impl / etc.软件包,导致单个“特性”被强制跨越许多软件包,当说某个服务可能是一个完全内部的实现细节,不适合外部使用…).
所以理想的目标是让第一方提供的Jar我明确表示不会使用这些东西,理想情况是根本没有它们可用(不存在于API jar中),因此不可能让他们使用和编译那些内部对象/方法.
更理想的是对象只能从某种工厂获得(例如提供的Spring Bean),这是一种防止从他们的代码或自定义bean直接实例化的方法(这可能会留下一些未来,尚未存在的属性在升级后未初始化) .
我目前了解的两种正式方式是:
>在我工作的一些项目中,有一个api包(例如com.stackoverflow.mylib.api),规则只是该包的内容可以由外部用户直接访问.
>在我参与的其他一些项目中,有一些自定义属性,例如: @PublicSDK标记公众使用的对象和方法(我认为一些额外的东西,以确保只有标记为这样的东西在公共分布的javadoc和api jar中).