阅读更多

8顶
5踩

编程语言

原创新闻 Spring破坏了JEE规范吗?

2008-09-02 14:05 by 资深记者 kyo100900 评论(18) 有8587人浏览
[TTS 编辑注:这是 TTS 论坛上的原帖。我现在把它放到 TTS 主页上来,就是认定这又会是一场非常有趣的口水打仗。 ]

原文请看:[url]http://www.theserverside.com/news/thread.tss?thread_id=50477 [/url]

正文:

首先,我不是 Spring 的反对者。我已经在许多项目中用到了 Spring ,并心悦诚服的认为它是一个伟大的框架。

我想就我实际工作中 Spring+JEE 的整合,来探讨一些实际中遇到的问题(或者说更具“学术”性质的问题)。当我第一次看 JEE 规范的时候,这些问题就开始萦绕在我脑中。虽然的让我很困惑啊,但却很有意义。我现在已经知道不可以直接往文件系统写内容了。 [ 注:在 EJB 中新建,修改,删除文件系统的文件是不允许的 ] 。但我却不知道,在 EJB 3.0 Spec 21.1.2 规范中指出:在 EJBs 中不允许使用 Class.forName() 或类似的方法。

规范指出:

》        不允许 EJB 去试图建立一个 class loader ;

》        不允许 EJB 去得到当前的 class loader ;

》        不允许 EJB 去设置当前的 class loader ;

》        不允许 EJB 去设置 security manager (安全管理);

》        不允许 EJB 去停止 JVM ;

》        不允许 EJB 改变 input, output 以及 error stream( 流 ) ; 

这就是 Spring 的第一个违反 JEE 规范的实例:当我要得到 Spring 中配置的 Bean 时,该 bean 会动态的用类似于 Class.forName() 的方法将其实例化。在使用这个方法,那么无论是显式还是隐式的都会得到一个 class loader 。我认为不允许动态实例化的意义在于应用服务器是想完全掌控应用程序,从而将资源等其它方面达到最优。你们怎么想的?我确实很想听听你们的意见。难道我对规范理解错了?

第二个违反规范的例子是在 J2EE 应用程序中使用 AbstractStatelessSessionBean 时发现的。规范中说: Stateless Session Bean 不允许被继承。这点我同意,尽管看上去过于“学术”,但我坚信这么做一定有它的理由。( [ 注 ] 关于这一点,网友马上找到规范当场对质。实际上规范说是是: session bean 可以有父类或接口 ……. 一个 session bean 不允许将另一个 session bean 作为其父类 ………. )

我还发现根本就没要 Spring+JEE 组合。

因为同样我还发现,一些 Spring Integration Modules 在不同的应用服务器下表现的比直接使用 Spring 更出色。 ( 比如说在 EJB 容器中加载 Spring Context) 。你们在用应用服务器与 Spring Integration Modules 整合时,有没有类似经验?你们觉得这样使用是不是就可以解决我上面我所提到的问题呢?
8
5
评论 共 18 条 请登录后发表评论
18 楼 anckbx 2009-09-09 17:53
哈哈,钻牛角尖
17 楼 海底行者 2008-10-11 18:44
不管他规则不规则,只好用就是好框架!效率第一,规则是人定的!
邓曾经说过,不管黑猫白猫,抓到老鼠就是好猫!
16 楼 aidiyuxin 2008-10-07 11:44
貌似这个问题吵了好久了
15 楼 xiaoJava 2008-10-06 21:17
遵守规范不一定有好处
不遵守规范可能没有好处
14 楼 rocwon 2008-09-04 09:36
第二个违反规范的例子是在 J2EE 应用程序中使用 AbstractStatelessSessionBean 时发现的。规范中说: Stateless Session Bean 不允许被继承。
-----------------------------------
你不觉得这是EJB规范本身不合时宜么? 继承是OO天然的特性,而这个规范却破坏了它.
13 楼 xzj127 2008-09-03 22:56
一切都是浮云...

     我们要透过表层看到本质啊!
12 楼 eeeeeeee 2008-09-03 22:09
规范是人定的……

11 楼 xuyao 2008-09-03 20:51
Spring是伟大的,伟大的东西总是要找来些质疑,就像windows
10 楼 wbl313 2008-09-03 18:01
你说的那是ejb的规范,不是J2EE的
J2EE!=EJB
9 楼 cuiyi.crazy 2008-09-03 14:23
规范涵盖了我们能遇到的 也兼顾了我们遇不到的

项目去检验貌似对,但是不够用呀
8 楼 zk521 2008-09-03 11:05
规范是人定的就可以被改变. 那种好 那种不好 要项目说了算 纸上谈兵没有任何意义
7 楼 cuiyi.crazy 2008-09-03 10:41
JEE规范兼顾了更多,并不能说Spring违背的JEE规范的地方就是不妥善的,没准这些不允许的地方要么是基于合理的考虑要么是基于利益的妥协。

但是从总体上说,Spring更加务实于应用,而且涵盖了几乎常用的面,呵呵,我们又是致力在应用中,而且常用的Spring处理的好,自然就觉得好了....
6 楼 QQbyte 2008-09-03 09:25
这个问题在TheServerSide上吵翻天了~~~~

其实规则就是用来破坏的,嘿嘿。
5 楼 starfeng 2008-09-03 09:23
通常能引起口水的原因,通常是一知半懂的人提出一个看起来正确,其实错误一堆的问题。
4 楼 lkjust08 2008-09-03 08:46
其实spring的出现的确是一个伟大的创举,也正是因为它的出现,j2ee才变的有意思,不过spring的好与坏,还需要时间去证明。
3 楼 bottom 2008-09-02 22:20
J2EE的规范 is not law. It is not perfect.  违背就违背了,又怎么样?
2 楼 aaa_star 2008-09-02 17:40
呵呵,没什么违反不违反的,正如spring创始人所说,ejb不是java ee/j2ee的全部,那只是其中的一部分而已,不是说某个框架符合ejb才算是符合java ee
1 楼 protti 2008-09-02 16:01
我感觉spring没有违背J2EE的规范。而是更好的完善了它。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • ndis驱动:无线局域网 NDIS 小端口驱动实现

     无线局域网经过几年发展在技术上已经日渐成熟尤其是IEEE推出802.11-1999和802.11b以来应用也日渐广 泛无线局域网硬件实现两大主要部分是基带处理器和MAC控制器软件Software部分包括驱动网卡本身工作嵌入 式软件Software和驱动在本文中首先介绍了小端口驱动基本要点然后给出了基于Driver Studio开发PCMCIA接 口编程I/O(Programmed IO)方式工作无线局域网网卡NDIS(网络驱动接口标准)并讨论了小端口驱动实现过程 中若干关键技术细节

  • NDIS网络驱动程序-----

    from:http://blog.sina.com.cn/s/blog_61d65e360100waop.html NDIS网络驱动程序-----学习(一) (2011-08-15 21:48:14) 转载▼     NDIS网络驱动程序学习(一) 关于网络编程,大家用的比较多的就是SOCKET。其中呢,SOCKET分TCP,UDP,原始套接字

  • ndis协议驱动流程图

    自己画的ndis协议流程图。

  • Windows应用程序启动方式---------《windows核心编程》读书笔记(2)

    进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:• 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。• 另一个是地址空间,它包含所有可执行模块或D L L模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。Windows支持两种类型的应用程序。一种是基于图形用户界面(GUI)的应用程序,另一种是基于控制台

  • 详细分析Ndis协议驱动和Ndis中间层过滤驱动区别(Ndisprot和passthru)

    <br />Ndisprot和passthru源码解析

  • 第五课 Spring的数据源

    Spring对DAO的理念 DAO(Data Access Object)是用于访问数据的对象,虽然在大多数情况下将数据保存在数据库中,但这并不是唯一的选择,也可以将数据存储到文件中或LDAP中,DAO不但屏蔽了数据存储的最终介质的不同,...

  • java中spring的使用

    java中spring的使用  Spring是一个开源框架,框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由...

  • Spring

    分层 ,轻量级开源框架,以反转控制(InverseofControl,IoC)和面向切面编程(AspectOrientedProgramming,AOP)为内核,提供了展现层SpringMVC、持久层SpringJDBC以及业务层事务管理等众多的企业级应用技术,整合...

  • Spring Security参考手册

    Spring Security 参考手册Ben AlexLuke TaylorRob WinchGunnar HillertTable of Contents前言入门简介Spring Security是什么?历史发布版本号Getting Spring SecuritySpring Security 4.1新特性Java 配置提升Web应用...

  • NDIS协议驱动学习一——协议驱动架构

    以下是《寒江独钓》NDIS相关章节的学习笔记 一、协议驱动架构 1.以太网包和协议驱动 1.1以太网包结构 左边是低地址,右边是高地址 传输层发送TCP/UDP包然后在网络层再加上IP信息封装成IP包,协议又把IP包封装成以太网包发送出去,这些操作都是协议驱动做到的。但是协议驱动难以干预其他应用程序接受或者发送包,所以一般不用于防火墙。 1.2NDIS网络驱动 NDIS是NetWorkDriver Interface Specification(网卡驱动接口标准)的简写,从名字上可以...

  • NDIS驱动(一)协议驱动

    NDIS网络驱动分类 协议驱动:上层直接提供应用层socket使用的数据传输接口,下层绑定小端口驱动用于发送和接收以太网包、 小端口驱动:直接针对网卡,给协议驱动提供接收和发生数据的能力 中间层驱动:以一种特殊的方式插入到协议驱动和小端口驱动之间,作为过滤驱动的最佳选择。 协议驱动 使用wdk下的ndisport工程,不提供传输层接口,只是只有ReadFile、WriteFile

  • Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platfrom))

    catalog 0.引言 1.Windows 2000网络结构和OSI模型 2.NDIS驱动 3.NDIS微端口驱动编程实例 4.NDIS中间层驱动编程实例 5.TDI驱动 6.TDI驱动 7.TDI的过滤框架 8.WFP(Windows Filtering Platform windows过滤平台) 0.引言 最早出现的网络驱动应该是网卡驱动,这是Windows的下进行...

  • 【Spring】Spring Framework Reference Documentation中文版12

    Part IV....The adoption of the test-driven-development (TDD) approach to software development is certainly advocated by the Spring team, and so coverage of Spring’s support for integrati

  • Spring Security和Angular教程(三)资源服务器

    Spring Security和Angular教程(三) 资源服务器 在本节中,我们将继续讨论如何在“单页面应用程序”中使用带有Angular的Spring Security。在这里,我们首先将我们用作应用程序中的动态内容的“greeting”资源分解...

  • Spring Security和Angular教程

    Spring Security和Angular教程 (一)安全的单页应用程序 在本教程中,我们展示了Spring Security,Spring Boot和Angular的一些很好的功能,它们协同工作以提供愉快和安全的用户体验。Spring和Angular的初学者应该...

  • spring事务隔离级别、传播行为以及spring+mybatis+atomikos实现分布式事务管理

    1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都...2.事务隔离级别:spring有五大隔离级别,其在TransactionDefinition中定义 3.事务传播行为:七大传播行为

  • Spring 5 中文解析之测试篇-集成测试(中)

    3.5 Spring TestContext框架 Spring TestContext 框架(位于org.springframework.test.context包中)提供了通用的、注解驱动的单元和集成测试支持,这些支持与所使用的测试框架无关。TestContext框架还非常重视约定...

Global site tag (gtag.js) - Google Analytics