我是一名Java SE开发人员,但我有丰富的网页背景(PHP,Perl / CGI等),现在我正在开始新项目。它将具有Web界面,意大利面条业务逻辑,关系数据库作为存储和与其他服务的连接。我是从零开始做的。
我的同事告诉我使用弹簧,弹簧安全装置和支柱。 我简要地看一下Java EE 6规范,发现它几乎涵盖了企业应用程序的所有方面。我问同事他们为什么需要spring和struts,但看起来他们只是因为熟悉它们而不熟悉经典的Java EE 6堆栈而使用技术。
所以,我的问题是:Java EE 6有什么不好的地方? 如果有JNDI查找,为什么我需要spring?为单元测试创建假的InitialContext需要一两天的时间。这就是全部:我坚持使用像春天这样的外部工具。 如果Servlets规范中内置了安全性,为什么我需要spring-security? 我可以使用web.xml将任何请求映射到任何servlet,不需要struts.xml。我可以使用servlet-filters而不是struts拦截器。 有RMI,所以我不需要弹簧遥控器。 等等..
如果有Java EE 6,为什么我要用所有那些花哨的东西来烦扰自己呢?
我真的很想找到Java EE 6不够的情况。 你有吗?
谢谢!
答案 0 :(得分:13)
为什么人们使用Spring以及为什么它如此受欢迎需要一点历史。
以前,Spring比Java EE应用程序更简单。我指的是EJB2.x规范。我觉得有一种反对该规范复杂性的反叛。开发人员想要一个更简单的架构,Spring为他们提供了编写POJO(Plain Old Java Objects)而不是必须实现特定接口以获得所需功能的类。
Spring还使两个原则更受欢迎:控制反转(IoC)和依赖注入。结合起来,这两个原则提供了一种不同的方式来连接应用程序的各个组件,并在运行时将这些组件放入应用程序中。结合仅仅编写POJO的想法对于许多人来说非常引人注目,因为代码更简单,并且更容易连接所有组件。
较新的EJB3规范取消了Spring提供的一些功能,但Spring不仅仅是一个IoC容器。它为JDBC访问数据库提供了很好的模板,处理事务的多种简单方法,测试实用程序,MVC堆栈等等。它很受欢迎,仍然很受欢迎。我听过的一个笑话是
“EJB3,没人问过的问题的答案......”
EJB3是一个不错的选择。春天是个不错的选择。 Grails也是一个很好的选择(使用Spring,Hibernate)。
答案 1 :(得分:1)
Java EE不需要Spring。 Spring只是使复杂的Java EE组件易于使用。
答案 2 :(得分:1)
“那么,为什么我需要弹簧?”
伊利亚安德!最后你说服了我(并希望你自己)你不需要Spring。实际上在所有这些堆中没有什么特别的好处...除非你已经习惯了它。他们写了一本关于网络技术的书,然后将其余的计算机科学添加到其中并称之为RESTfull。
“但是,想象一下有很多处理表单输入和大量模型的代码。每个控制器都可以有一个视图”。
阿米尔! - 非常好的考虑。我所知道的Web框架之间的真正区别在于组件的定义是什么。 Struts有三种类型的组件 - View,Controler和Model组件。乍一看看起来不错(肯定比其他人好)。但是你能为这些组件构建什么? - 一页视图,一页控制器和一页模型。上帝知道从这三行组件绑定项目的成本是多少 - 如果可能的话,可能是一个巨大的配置。
真正的解决方案是(正如您在上面引用的实际中所述)是一个组件的概念,每个组件都有自己的视图,控制器和模型。迄今为止只有一个框架到目前为止 - HybridJava。什么是Spring中的网页构建块?
答案 3 :(得分:1)
听起来你需要使用Spring POC特定功能,然后使用Java EE 6,这样就可以比较两者,就像使用真正有效的实用原型一样。
我使用spring的原因是:
答案 4 :(得分:0)
Spring一个模型 - 视图 - 控制器,使Java EE更清洁,更有条理。分离模型,视图和控制器在结构上更正确。
我同意你的看法。如果它是一个简单的网站,那么我认为你可以用Java EE做任何事情。但是,想象一下有很多处理表单输入和大量模型的代码。每个控制器可以具有视图。您可以创建一个servlet,然后转发到正确的jsp页面,或者您可以使用spring,因为它已经完成了所有这些操作。
决定你需要多少使用弹簧。一个好的框架可以让您选择要使用的部件。我认为Spring做得很好,因为你可以使用mvc模型或进一步使用它做更多。
最后,spring有依赖注入,这使配置更容易。