您的第一个 Java EE Spring 项目的“最佳实践”是什么?[关闭]
题
我目前正在尝试使用 Spring 框架进行 Java EE 开发。由于我是 Spring 的新手,很难想象一个良好的运行项目应该如何开始。
你有什么 最佳实践, 、小费或主要 不要做 首先?您是如何开始使用 Spring 的——大型项目还是类似教程的小型应用程序?您立即使用了哪种技术:AOP、复杂的 Hibernate...
解决方案
小提示 - 我发现根据应用程序问题模块化并清楚地标记我的 Spring xml 上下文文件很有帮助。以下是我开发的网络应用程序的示例:
MyProject / src / main / resources / spring /
- 数据源.xml - 我的单个数据源 bean。
- 持久性.xml - 我的 DAO/存储库。依赖于取决于
datasource.xml
豆子。 - 服务.xml - 服务层实现。这些通常是我使用 AOP 应用事务性的 Bean。依赖于取决于
persistence.xml
豆子。 - 控制器.xml - 我的 Spring MVC 控制器。依赖于取决于
services.xml
豆子。 - 视图.xml - 我的视图实现。
这份清单既不完美也不详尽,但我希望它能说明这一点。选择最适合您的命名策略和粒度。
根据我(有限的)经验,我发现这种方法具有以下好处:
架构更清晰
清楚命名的上下文文件使那些不熟悉您的项目结构的人是一个合理的开始寻找bean定义的地方。可以使检测循环/不需要的依赖关系变得更容易。
帮助域设计
如果您想添加 bean 定义,但它不太适合您的任何上下文文件,也许出现了新的概念或问题?例子:
- 假设您希望使用 AOP 使服务层具有事务性。您是否将这些 bean 定义添加到
services.xml
, ,或者将它们放入自己的transactionPolicy.xml
?与您的团队讨论一下。您的交易策略应该是可插入的吗? - 将 Acegi/Spring Security bean 添加到您的
controllers.xml
文件,或创建一个security.xml
上下文文件?您对不同的部署/环境有不同的安全要求吗?
集成测试
您可以连接应用程序的子集以进行集成测试(例如:给定上述文件,要测试您只需要创建的数据库 datasource.xml
和 persistence.xml
豆子)。
具体来说,您可以这样注释集成测试类:
@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })
与 Spring IDE 的 Beans Graph 配合良好
拥有大量集中且命名良好的上下文文件可以轻松创建自定义 BeansConfigSet,以使用 Spring IDE 可视化应用程序的各层 豆类图. 。我之前曾使用过它来让新团队成员对我们的应用程序组织有一个高级概述。
其他提示
首先关注 Spring 的核心:依赖注入。一旦您了解了 DI 的所有使用方式,就可以开始考虑更有趣的部分,例如 AOP、Remoting、JDBC 模板等。所以我最好的建议是让你对 Spring 的使用从核心开始发展。
最佳实践?如果您使用标准 XML 配置,请管理各个文件的大小并明智地对其进行注释。您可能认为您和其他人会完全理解您的 bean 定义,但实际上它们比普通的旧 java 代码更难返回。
祝你好运!
首先,Spring 是关于模块化的,如果一个人专注于编写只做一件事并且做得很好的小组件,那么它的效果最好。
如果您遵循一般最佳实践,例如:
- 定义接口而不是抽象类
- 使类型不可变
- 使单个类的依赖关系尽可能少。
- 每个班级应该做一件事,并把它做好。大型整体类很糟糕,它们难以测试且难以使用。
如果您的组件很小并且遵循上面的规则,那么它们应该很容易连接并与其他东西一起使用。以上几点对于 Spring 框架本身来说自然也是如此。
聚苯乙烯
别听上面的那些,他们是在说怎么做。学会如何思考比学会如何做更重要。人类会思考,重复某件事并不聪明,思考才是。
其实我很喜欢春天..对于普通的 J2EE Java Bean 来说,这是一股清新的气息。
我建议实现 Spring 提供的示例:
http://static.springframework.org/docs/Spring-MVC-step-by-step/
另外,我决定全力以赴,将 Hibernate 添加到我的 Spring 应用程序中;),因为 Spring 为 Hibernate 提供了出色的支持......:)
然而,我确实有一个“不要”,这是我通过艰难的方式学到的(生产中的产品)......如果您只实现 Controller 接口,并返回一个 ModelAndView 对象,其中包含接口提供的一些数据,Spring 会垃圾收集这些资源,以尝试缓存这些数据。因此,在这些 ModelAndView 对象中放入大量数据时要小心,因为只要服务器在空中,一旦该页面被查看,它们就会占用您的服务器内存......
从这里开始 - 实际上我认为这是我读过的最好的软件开发书籍之一。
Spring MVC 和 Web 流程专家
了解 MVC 类的新的基于注释的配置。这是 Spring 2.5 的一部分。使用基于注释的类将使编写单元测试变得更加容易。能够减少 XML 的数量也是一件好事。
哦,是的,单元测试 - 如果您使用 Spring,那么您最好进行单元测试。:) 为所有 Web 和服务层类编写单元测试。
阅读领域驱动设计。事实上,您可以在 Spring 应用程序的各个级别使用域对象类,这意味着您将拥有一个非常强大的域模型。利用它。
然而,当使用域对象类进行表单填充时,您需要注意 Spring 框架最近的安全问题。 关于服务器端的讨论 揭示了填补评论漏洞的方法。
“……您立即使用了哪种技术:AOP,复杂的 Hibernate...” - 我想说更好的问题是问人们没有立即使用什么。我会将您引用的示例添加到该列表中。
Spring MVC 和 JDBC 模板将是我的起始推荐。有了这些你就可以走很长的路。
我的建议是忠实地遵循 Spring 架构建议。运用他们的分层想法。确保您的网络层与其余层完全可分离。您可以通过让 Web 层仅通过服务层与后端交互来实现此目的。
如果您想重用该服务层,一个好的建议是使用 Spring“契约优先”Web 服务公开它。如果您从来回传递的 XML 消息开始,那么您的客户端和服务器就可以完全解耦。
对 Spring 支持最好的 IDE 是 IntelliJ。花几块钱是值得的。
虽然我已经使用 spring 多年了,而且我不能说我是它的粉丝,但我知道 App Fuse 工具(https://java.net/projects/appfuse/)有助于帮助人们引导生成您需要的所有工件。
Spring 也非常关注单元测试以及类的可测试性。这基本上意味着考虑模块化、关注点分离、通过接口引用类等。
如果您只是想尝试一下,看看是否喜欢它,我建议从 DAO 层开始,使用 Spring 的 JDBC 和/或 Hibernate 支持。这将使您了解许多核心概念,但这样做的方式很容易与应用程序的其余部分隔离。这是我遵循的路线,在使用 Spring 构建完整的应用程序之前这是很好的热身。
随着 Spring 2.5 和 3.0 的发布,我认为现在最重要的最佳实践之一就是 Spring 注释。控制器、服务和存储库的注释可以为您节省大量时间,让您能够专注于应用程序的业务逻辑,并且有可能使您的所有对象成为普通的旧 Java 对象 (POJO)。