00:00
大家继续观看上硅谷ID技术视频,这节课我们继续讲解中的API与implementation的区别。前面我们已经给大家提到过,API它是由Java library这个插件提供的,而implementation它是由Java插件提供的。那除此之外。API在底层,它是支持依赖传递的,所以底层代码发生变化,上面的代码都要跟着发生变化,这样会导致所有的代码都需要进行重新编译,所以速度会慢一些。Or implementation?它不支持依赖的传递,底层代码变上层的代码,不一定都需要发生变化。所以变异速度会快一些。这是在编译期,他们有一些区别。啊,一个是支持依赖的传递,一个是不支持依赖的传递。在运行期,无论是API还是implementation。所有模块的字节码都需要被加载,所以在运行器它们是没有区别的。再一个应用场景,多数情况下,咱们应该优先考虑implementation,因为它的编译速度会快一些。
01:05
而在多模块依赖的时候,咱们应该优先考虑API。它可以避免。重复依赖。下面咱们通过一个具体的分析。给大家。再来看一下。比如在这里有一个。它依赖了一个。Lib a这个价包也依赖了一个lib b这个价包,然后lib a又依赖了lib c,而lib b又依赖了lib d。总之你会发现在这张图上,左边的都是通过API进行依赖的。而右边的都是通过implementation进行依赖的。试想一下,如果力博C里边的代码发生变化,由于他们是使用API依赖,所以API是支持依赖传递的,所以lib c代码发生变化会传给Li a。
02:00
然后再传给啊products,所以啊会导致他们都需要重新编译,速度相对来说就慢一些。那如果是Li d发生变化,由于它这里用的是implementation进行依赖的。那么lib b并不会把底层它所依赖的lib d代码中发生变化的这一部分传递给啊。Products。所以。只会由lib b和lib b发生变化,但是这个product s代码并不并没有发生变化。那只需要把发生变化的代码重新编译。啊,只有Li b和Li d,所以它的变异速度会相对来说快一些,这是在运行,在这是在编译期。那如果是在运行期呢?无论是leave c leave a leave b Le d,还是product s他们的。字节码都是需要背的。加载加载的,所以啊在运行期他们是没有区别的。
03:01
OK啊,接着咱们也在这里又给大家拓展了一下啊。然后通过举例的方式又给大家说明了一下啊,说明API它的应用场景适用于啊多模块依赖。比如说。模块A依赖了模块B,而模块B又依赖了模块C,那么模块A也需要去依赖模块C的时候。这时候我们为了避免重复依赖啊,我们可以使用模块B,在依赖模块C的时候,使用API的这种依赖方式就可以了。这样就可以避免。啊,如果我们都使用implementation去进行依赖的话,这个模块A还需要重复的依赖模块C。OK啊,然后这里也给大家举了几个例子,比如说。这个a implement b,然后B又是C是吧,然后这时候你可以想一下,A实际上是不能使用C的。
04:00
啊,因为implementation它支持依赖的传递。那如果是A。通过这种方式依赖了BB,通过API依赖了C。那实际上A是可以使用到C的。再一个就是A。通过implementation依赖了BB,又通过implementation依赖了CC,又通过API依赖了D。那B是可以使用D的,但A却不能使用D。OK啊,来我们看一下,如果A通过implementation依赖了BB,通过API依赖了CC,通过API依赖了D,那实际上这个A是可以使用这个D的。OK啊,总之这些给大家说明的实际上都是在编译阶段。那是在运行阶段呢,这些模块的。字节码实际上都是要被加载的。OK啊,所以综上所述,总之大家能够理解。
05:03
啊,我们只有在多模块依赖的时候,为了避免重复依赖,所以咱们会使用API进行依赖,而其他情况咱们优先使用implementation依赖。因为它可以增加啊,因因为它可以这个。增加构建的效率。OK。这是这个API和implementation的一个区别。
我来说两句