对于第一个Java EE Spring项目,您的“最佳实践”是什么?

时间:2008-08-12 07:36:14

标签: java spring java-ee aop

我目前正在尝试使用Spring框架进入Java EE开发。由于我是Spring的新手,很难想象一个好的运行项目应该如何开始。

您是否有任何最佳做法,tipps或主要 DO NOTs 作为入门者?你是如何从Spring开始的 - 大项目或类似教程的小应用程序?您立即使用了哪种技术:AOP,复杂的Hibernate ......

11 个答案:

答案 0 :(得分:22)

小提示 - 我发现基于应用程序问题对我的Spring xml上下文文件进行模块化和清楚标记很有帮助。这是我工作的Web应用程序的示例:

  • MyProject / src / main / resources / spring /
    • datasource.xml - 我的单一数据源bean。
    • persistence.xml - 我的DAO /存储库。取决于datasource.xml bean。
    • services.xml - 服务层实施。这些通常是我使用AOP应用事务性的bean。取决于persistence.xml bean。
    • controllers.xml - 我的Spring MVC控制器。取决于services.xml bean。
    • views.xml - 我的视图实现。

这个清单既不完美也不详尽,但我希望它说明了这一点。选择最适合您的命名策略和粒度。

在我(有限)的经历中,我看到这种方法有以下好处:

更清晰的架构

明确命名的上下文文件使那些不熟悉您的项目结构的人合理 开始寻找bean定义的地方。可以更容易地检测循环/不需要的依赖关系。

帮助设计域

如果你想添加一个bean定义,但它不适合你的任何上下文文件,那么是否会出现一个新的概念或关注点?例子:

  • 假设您要使用AOP使您的服务层处于事务处理状态。您是将这些bean定义添加到services.xml,还是将它们放在自己的transactionPolicy.xml中?与您的团队讨论。您的交易政策应该是可插入的吗?
  • 将Acegi / Spring Security bean添加到controllers.xml文件,或创建security.xml上下文文件?您对不同的部署/环境有不同的安全要求吗?

集成测试

您可以连接应用程序的一个子集进行集成测试(例如:给定上述文件,以测试您只需要创建datasource.xmlpersistence.xml bean的数据库)。

具体来说,您可以注释集成测试类:

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })

适用于Spring IDE的Beans Graph

拥有大量专注且命名良好的上下文文件,可以轻松创建自定义BeansConfigSets,以使用Spring IDE的Beans Graph可视化应用程序的各个层。我之前使用过它,可以让新团队成员对我们的应用程序组织进行高级概述。

答案 1 :(得分:14)

首先关注Spring的核心:依赖注入。一旦你看到DI可以使用的所有方式,然后开始考虑更有趣的部分,如AOP,远程处理,JDBC模板等。所以我最好的建议是让你使用Spring从核心中成长。

最佳做法?如果您使用的是标准XML配置,请管理单个文件的大小并明智地对其进行评论。您可能认为您和其他人将完全理解您的bean定义,但在实践中,它们比简单的旧Java代码更难回归。

祝你好运!

答案 2 :(得分:4)

首先,Spring是关于模块化的,如果一个人专注于编写做一件事并且做得好的小组件,那么效果最好。

如果您遵循以下最佳做法,请执行以下操作:

  • 定义接口而不是抽象类
  • 使类型不可变
  • 为单个班级保留尽可能少的依赖关系。
  • 每个班级应该做一件事,做得好。大型整体课程很糟糕,很难测试,难以使用。

如果您的组件很小并且遵循上面的教条,那么它们应该很容易接线并与其他东西一起玩。以上几点自然也适用于Spring框架本身。

PS

不要听从上面的观点,他们正在谈论如何做任何事情。学习如何思考而不是如何做某事更重要。人类可以思考,重复一些事情并不聪明,思考就是。

答案 3 :(得分:3)

从这里开始 - 我实际上认为它是我读过的最好的软件开发书之一 Expert Spring MVC And Web Flow

了解MVC类的基于Annotation的新配置。这是Spring 2.5的一部分。使用基于注释的类将使编写单元测试变得更容易。还能够减少XML的数量是一件好事。

哦是的单元测试 - 如果你使用的是Spring,那么你就更好了单元测试。 :)为所有Web和服务层类编写单元测试。

阅读域驱动设计。您可以在Spring应用程序的所有级别使用域对象类这一事实意味着您将拥有非常强大的域模型。利用它。

但是,在使用域对象类进行表单填充时,您需要注意Spring框架最近的安全问题。 A discussion on the Server Side揭示了在评论中关闭漏洞的方法。

答案 4 :(得分:3)

我实际上非常喜欢Spring ..在普通的J2EE Java Beans中,这是一阵清新的空气......

我建议实现Spring提供的示例:

http://static.springframework.org/docs/Spring-MVC-step-by-step/

另外,我决定使用完全monty并将Hibernate添加到我的Spring应用程序中;),因为Spring为Hibernate提供了出色的支持...... :)

我确实有一个DO NOT但是我学到了很难的方法(生产中的产品)......如果你只实现了Controller接口,并返回一个ModelAndView对象,其中包含接口提供的一些数据,那么garbadge收集这些资源,试图缓存这些数据。所以要小心将大数据放在那些ModelAndView对象中,因为只要服务器在查看该页面后立即播出,它们就会占用你的服务器内存......

答案 5 :(得分:2)

虽然自从我使用弹簧已有多年,但我不能说我是它的粉丝,我知道App Fuse工具(https://java.net/projects/appfuse/)对于帮助人们引导生成你需要的所有工件。

答案 6 :(得分:2)

“......你马上使用了哪种技术:AOP,复杂的Hibernate ...” - 我想说一个更好的问题就是问一下人们没有马上使用它们。我会将您引用的示例添加到该列表中。

Spring MVC和JDBC模板将是我的首发建议。你可以走很长的路。

我的建议是忠实地遵循Spring架构建议。使用他们的分层思想。确保您的Web图层完全可以与其他图层分离。您可以通过让Web层仅通过服务层与后端进行交互来实现此目的。

如果您想重用该服务层,一个好的建议是使用Spring“契约优先”Web服务公开它。如果您从前后传递的XML消息开始,则可以将客户端和服务器完全分离。

具有最佳Spring支持的IDE是IntelliJ。值得花一些钱。

答案 7 :(得分:2)

入门的好方法是专注于“Springframework”。 Spring组合已经发展成为围绕企业软件各个方面的大量项目。在开始时坚持核心,并尝试掌握概念。 Download最新的二进制文件,一旦熟悉了核心,就可以查看Spring的petclinic示例。它对SpringSource提供的各种项目提供了很好的概述。

虽然文档非常好,但在掌握了核心概念之后I'd recommend a book。我发现文档存在问题的原因是它不够深入,无法为您提供所需的所有详细信息。

答案 8 :(得分:1)

如果你只是想稍微涉足它并看看你是否喜欢它,我建议从DAO层开始,使用Spring的JDBC和/或Hibernate支持。这将向您展示许多核心概念,但这样做的方式很容易与应用程序的其余部分隔离开来。这是我遵循的路线,在使用Spring构建完整的应用程序之前进行了很好的预热。

答案 9 :(得分:1)

随着Spring 2.5和3.0的发布,我认为现在利用的最重要的最佳实践之一是Spring注释。控制器,服务和存储库的注释可以为您节省大量时间,让您可以专注于应用程序的业务逻辑,并且可能使您可以创建所有对象普通旧Java对象(PO​​JO)。

答案 10 :(得分:1)

Spring也非常关注单元测试,因此也是类的可测试性。这基本上意味着考虑模块化,关注点分离,通过接口引用类等。