例如,如果我想在不使用OSGi的情况下在我的应用程序(模块化,依赖注入等)中获得OSGi的好处,我会使用哪些设计模式?
答案 0 :(得分:1)
您提到的两个位于我的列表顶部:
<强>模块化即可。您没有类加载器隔离的好处,因此您将不得不使用自己的约定来确保不“跨越”到其他组件。如果您认为切换到OSGi是您项目的未来,那么您肯定要避免使用Class.forName,Thread.getContextClassLoader等,这在OSGi环境中无法正常工作。
<强>服务即可。您没有服务注册表的好处,它允许单独模块中的组件在保持松散耦合的同时发现并相互注册,因此您将需要使用类似的东西。有PojoSR,但你可以使用依赖注入框架来松散耦合。
OSGi的其余部分大部分是规范保证框架将为您做的事情(JVM单例,安全性,管理,动态等),因此您将独立完成。查看Benefits of Using OSGi列表可能最容易看到您将丢失的内容。
答案 1 :(得分:0)
OSGI开箱即用。如果你不想使用它,我仍然建议使用某种框架,例如弹簧。
Spring更易于设置并具有依赖注入容器。当然,您可以按照创建类的方式进行自己的依赖注入。通常有两种方法,构造函数注入,其中所需的类/对象在对象创建的构造函数参数中传递,以及setter注入 - 其中类具有每个依赖项的setter。只需确保设置所有依赖项或对象可能处于无效状态。
模块化可能意味着很多事情取决于你想要走多远。作为一般规则,针对接口的编程将获得一定程度的模块化。使用众所周知的软件架构(如MVC和相关模式)将为您提供一些方法。 OSGI使用白板模式与发布/订阅或侦听器模式,但两者都满足类似的需求。这两种模式都允许对象进行广泛的解耦。
如果您发布了您想要实现的类型,我可以为您提供更多帮助。