想象一下,您想在 Java 中拥有一个高度模块化的 Web 应用程序。组件也已经在使用 Spring 框架。一些组件仅涵盖纯逻辑,而其他一些组件还带有一些 HTML 演示 GUI。该应用程序与 Portlet 不兼容,但我们需要动态菜单来提升已安装模块的列表以及指向页面或 REST API 的链接。由于它是 Java,因此建议使用 OSGI,但我对 OSGI 的最新功能(过去几年引入)感到非常困惑,我有几个问题:
现在 OSGI 不仅是模块管理系统,也是 IoC 容器!它几乎包含许多 Spring IoC 特性的等效注释。那么我们如何在 OSGI 中使用启用 Spring 的模块呢?我们能否在新设计中取消 Spring 并完全依赖 OSGI?或者对于模块内的依赖注入,我们可以使用 Spring,对于模块上的依赖注入,我们可以使用 OSGI?
对于现实生活中的大型应用程序,我们有两种选择:在应用程序容器(例如 Tomcat)中使用嵌入式 Felix 或在 KARAF 中使用应用程序容器的 OSGI 捆绑包(Jetty 或 Tomcat)。哪种方法更好?哪一个更具可扩展性?