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

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

What's your “best practice” for the first Java EE Spring project?

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

对于初学者,您是否有最佳实践,建议或主要建议? 您是如何从Spring开始的-大项目或类似小型教程的应用程序? 您立即使用了哪种技术:AOP,复杂的Hibernate ...


小提示-我发现根据应用程序的关注对我的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)。

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

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

与Spring IDE的Beans Graph配合使用

拥有大量集中且名称明确的上下文文件,可以轻松创建自定义BeansConfigSet,以使用Spring IDE的Beans Graph可视化应用程序的各层。在此之前,我已经使用过此功能为新团队成员提供了我们应用程序组织的高级概述。


首先关注Spring的心脏:依赖注入。一旦您了解了可以使用DI的所有方式,然后开始考虑更有趣的部分,例如AOP,Remoting,JDBC模板等。因此,我最好的建议是让您从核心中使用Spring。

最佳实践?如果使用标准XML配置,请管理单个文件的大小并明智地对其进行注释。您可能认为您和其他人会完全理解您的bean定义,但实际上,与普通的旧Java代码相比,它们很难返回。

祝好运!


首先,Spring是关于模块化的,如果人们专注于编写能够完成一件事并做得很好的小型组件,那么它的工作效果最佳。

如果您遵循一般的最佳做法,例如:

  • 定义接口而不是抽象类
  • 使类型不可变
  • 对于单个类,请尽可能减少依赖项。
  • 每个班级应该做一件事,并且做好。 大型的整体类很烂,它们很难测试并且很难使用。

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

聚苯乙烯

不要听以上几点,他们正在谈论如何做任何事情。 学习如何思考比做某事更重要。 人类会思考,重复某件事并不聪明,思考才是。


从这里开始-我实际上认为它是我已阅读的最好的Software Dev书籍之一。
Spring MVC和Web Flow专家

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

哦,是的,单元测试-如果您使用的是Spring,那么最好还是进行单元测试。 :)为所有Web和服务层类编写单元测试。

阅读有关域驱动设计的文章。可以在Spring Application的所有级别上使用Domain Object类的事实意味着您将拥有一个非常强大的Domain Model。利用它。

但是,在将Domain Object类用于表单填充时,您将需要注意有关Spring Framework的最新安全问题。服务器端的讨论揭示了关闭注释漏洞的方法。


我实际上非常喜欢Spring ..在您普通的J2EE Java Bean中,这是新鲜的空气。

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

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

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

但是我确实有一个"不要",这是我学到的很难的方法(生产中的产品)...如果您仅实现Controller接口,并返回ModelAndView对象以及该接口提供的一些数据,Spring确实会进行垃圾收集资源,用于尝试缓存那些数据。因此请小心将大数据放入那些ModelAndView对象中,因为只要查看了该页面,只要服务器处于空中状态,它们就会占用服务器内存。


" ...您立即使用了哪种技术:AOP,复杂的Hibernate ..."-我想说的一个更好的问题是,请问人们没有立即使用什么。我会将您引用的示例添加到该列表中。

Spring MVC和JDBC模板将是我的入门建议。仅此而已,您就可以走很长一段路。

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

如果您想重用该服务层,一个很好的建议是使用Spring"首先合同" Web服务来公开它。如果从来回传递的XML消息开始,则客户端和服务器可以完全分离。

具有最佳Spring支持的IDE是IntelliJ。值得花几美元。


一个很好的入门方法是专注于" Springframework"。 Spring产品组合已经发展到围绕企业软件各个方面的大量项目。从一开始就坚持核心,并尝试掌握概念。熟悉内核后,下载最新的二进制文件并查看Spring的petclinic示例。它很好地概述了SpringSource提供的各种项目。

尽管文档非常好,但是在您掌握了核心概念之后,我还是建议您读一本书。我发现该文档存在问题,因为它不够深入,无法为您提供所需的所有详细信息。


自从我使用spring已经有很多年了,我不能说我是它的粉丝,但我知道App Fuse工具(https://java.net/projects/appfuse/)对帮助人们很有帮助在生成您需要开始的所有工件方面进行引导。


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


如果您只是想花一点时间看看是否喜欢它,我建议使用Spring的JDBC和/或Hibernate支持从DAO层开始。这将使您了解很多核心概念,但是这样做的方式很容易与应用程序的其余部分隔离。这是我遵循的方法,在使用Spring构建一个完整的应用程序之前,它是一个很好的热身。


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


推荐阅读