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

时间:2014-02-16 10:25:02

标签: java spring hibernate service components

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

希望它有意义,如果我正在朝着正确的方向前进,请提出建议,因为这是我的第一个项目?如果有人能指出我的小例子或推荐阅读,那将是很好的。

提前致谢

2 个答案:

答案 0 :(得分:1)

尝试使用OSGi。如果您使用的是Spring,那么OSGi规范中的声明式服务和可能 blueprint 容器就是您需要利用您迄今为止所做的工作。

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

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

  

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

Hibernate支持OSGi,因为可以看到here。至于OSGi实现,我建议Equinox,但存在许多其他有效的OSGi实现。由于您的项目是一个Web应用程序,您还可以检查 Virgo

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

,特别是

  

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

答案 1 :(得分:0)

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

到目前为止似乎运作良好。希望这对其他人也有帮助。