如何将大型 Java 应用程序分解为组件?

Posted

技术标签:

【中文标题】如何将大型 Java 应用程序分解为组件?【英文标题】:How do you break a large java application into components? 【发布时间】:2014-03-15 14:50:30 【问题描述】:

我正在使用 spring、hibernate 和 mysql 编写一个 java web 应用程序。应用程序越来越大,所以我想把它分成更小的部分,例如较小的项目、组件或任何可能的方式。例如,我有登录和图片上传功能,我不希望这两者都在一个代码库或项目中。我希望能够像彼此独立的单独服务一样单独使用这些。有没有办法做到这一点,例如将图片上传功能转换成jar,然后在实际项目中引用这个jar?企业项目如何拆分?

希望这是有道理的,如果这是我的第一个项目,请告知我是否朝着正确的方向前进?如果有人能指点我一个小例子或推荐阅读,那就太好了。

提前致谢

【问题讨论】:

小提示,始终遵循单一职责原则en.wikipedia.org/wiki/Single_responsibility_principle 【参考方案1】:

我最终使用了 maven 模块和 maven 依赖管理功能。我创建了一个单独的 maven 项目并根据需要不断添加 maven 模块,例如创建了一个用于图像上传的模块,一个用于公共库的模块等。 然后将这些模块中的每一个打包到 jar 文件中。然后,我使用 maven 依赖项将这些 jar 文件中的每一个导入到我的主 Web 项目中。

到目前为止,它似乎工作得很好。希望这对其他人也有帮助。

【讨论】:

【参考方案2】:

试试OSGi。如果您使用的是 Spring,那么您需要利用 OSGi 规范中的 declarative services 和可能的 blueprint 容器来利用您迄今为止所做的工作。

尝试阅读 Richard S. Hall、Karl Pauls、Stuart McCulloch 和 David Savage 撰写的 OSGi in Action,以深入了解这项技术。

OSGi 是一种用于 Java 软件开发的模块化方法,它强制创建松散耦合的服务。引用自 OSGi 联盟网站:

OSGi 技术是一组为 Java 定义动态组件系统的规范。这些规范通过为大型分布式系统以及小型嵌入式应用程序提供模块化架构来降低软件复杂性。

Hibernate 支持 OSGi,如 here 所示。至于 OSGi 实现,我会推荐 Equinox,但还有许多其他有效的 OSGi 实现。由于您的项目是一个网络应用程序,您还可以检查 Virgo

EclipseRT 的 Virgo 是一个完全基于模块的 Java 应用程序服务器,旨在运行企业 Java 应用程序和 Spring 驱动的应用程序,具有高度的灵活性和可靠性

特别是

支持 vanilla WAR 文件及其在 WEB-INF/lib 中的所有依赖项,以及 Web 应用程序捆绑包,这些文件通过 OSGi 清单元数据导入其依赖项,通过 OSGi Web 容器规范的参考实现,基于嵌入式 Apache Tomcat 和使用标准 Tomcat server.xml 配置

【讨论】:

以上是关于如何将大型 Java 应用程序分解为组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何分解我的 vuex 文件?

PHP 块 - 将大型XML文件分解为可管理块

模块化开发

将单个 iOS 屏幕分解为可重用的组件视图

如何在大型 vue.js 应用程序中构建组件?

反应原生导航器在大型应用程序中建模的最佳方式?