这门课解决什么问题,适合什么基础

很多写 Java 的人习惯了 Spring 那套大而全的单体容器,一旦碰到需要热插拔、模块隔离、多版本类共存的老系统或底层中间件,就会发现自己对 JVM 的类加载和模块边界根本是一笔糊涂账。这门课讲的 OSGi 正是补这块短板的硬骨头。它不教你写业务代码,而是解决一个核心问题:怎么把一个 Java 应用拆成互相独立又能动态部署的 Bundle,以及 Bundle 之间怎么通过服务注册表解耦通信。如果你连基础的 Maven 打包、接口与实现分离都还没吃透,建议先补这些再来;如果你已经能独立写 Java 程序,但看不懂 Equinox 或 Felix 的启动日志、搞不清 Bundle 生命周期里的 INSTALLED 和 RESOLVED 状态差在哪,这门课就是直接对着这个能力缺口来的。

建议先看哪几块,资料怎么配合练习

别从头到尾顺着看,时间要花在刀刃上。第一块先啃类加载机制、Bundle 生命周期和事件监听这几节,这是理解 OSGi 动态性的地基。第二块直接扎进服务相关的内容,包括服务注册与发现、事件监听、服务跟踪器和各种钩子机制,这是实际开发里打交道最多的部分。第三块看声明式服务、Blueprint 以及 Maven 打包插件,这部分决定了你能不能用工程化的方式把模块真正跑起来。至于 Karaf 容器的使用,可以当工具手册查着看。配套的代码资料不要只看不练,每看完一个机制,就自己写一个最小可运行的 Bundle 去验证。比如看完服务跟踪器,就自己写两个 Bundle,一个发布服务一个订阅,故意制造服务掉线的场景,看跟踪器能不能按预期回调。光看视频跟着抄一遍代码,到了排查包冲突的报错时照样抓瞎,必须自己动手把 ClassNotFoundException 和约束违反的坑踩一遍。

学完能独立做什么

把核心机制吃透后,你应该能独立完成几件具体的事。首先是能从零搭建一个基于 Felix 的运行环境,把业务逻辑拆成多个 Bundle 并正确打包部署,而不是把所有代码塞进一个超大依赖里。其次是能看懂并写出 Bundle 之间的服务交互代码,清楚什么时候该用服务注册表,什么时候该用事件机制,知道服务钩子能拦截什么、不能拦截什么。最后是能处理实际部署中的类加载冲突,当报出某个类找不到或者版本不匹配时,你能通过分析 Bundle 的导入导出包关系,定位是哪个依赖没声明对,而不是只会去删本地仓库重装。能独立做到这三点,这门课的硬核内容就算真正补进你的技术栈了。

课程目录

1 OSGi概要介绍及课程计划 (32:08)
2 Apache Felix介绍 (19:56)
3 OSGi helloword (10:14)
4 OSGi Bundle (49:33)
5 Bundle的事件监听 (12:05)
6 OSGi的类加载机制 (15:45)
7 OSGi服务的介绍 (42:37)
8 OSGi服务的事件监听 (15:42)
9 OSGi服务跟踪器 (25:23)
10 OSGi服务钩子 (21:50)
11 OSGi声明式服务 (18:58)
12 Apache Aries (05:44)
13 Apache Karaf (18:57)
14 Maven Bundle Plugin 插件 (27:56)
15 OSGi Blueprint(一) (31:18)
16 OSGi Blueprint(二) (22:20)
17 Log Service (18:41)
18 HTTP Service (32:40)
19 Configuration Admin Service(一) (36:20)
20 Configuration Admin Service(二) (31:16)
21 Event Admin Service (26:11)
22 JNDI Service (17:28)
23 JDBC Service (35:47)
24 JPA Service (42:54)
25 实现基于注解的Blueprint (44:17)
26 Apache Karaf Features (45:12)
27 OSGi开发中的一些注意事项 (49:35)