对Spring的十大常见误解

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比 本文深度解析了Chrome、Firefox和Safari三大浏览器对HTTP 304响应的不同触发场景和行为差异。通过对比测试,揭示了各浏览器在普通刷新、强制刷新、导航行为等5种场景下的缓存策略差异,并提供了针对性的优化建议和调试技巧,帮助开发者更好地理解和利用HTTP缓存机制提升网页性能。 阅读详情

在OnJava上看到的文章,觉得不错,试着翻了一下,希望对大家有帮助.

原文链接  http://www.oreillynet.com/onjava/blog/2006/08/ten_common_misconceptions_abou.html

       从对Spring框架的一些批评甚至攻击(不论公正与否)中可以归纳出对这一框架的十个常见的误解。

Spring 框架还不熟悉的人来说,可能需要先解决一些刚开始接触 Spring 时遇到的问题。实际上,我们编选的这个清单来自于培训 Spring 的新用户时总结的经验和查看 Java 开发社团中的讨论和论坛中内容。我们的目的对这些议题提供一些参考意见,以便在你的下一个项目中决定采用 Spring 时更加胸有成竹。
误解 1 Spring 不是轻量级的,它打算做所有的事情并且变得越来越庞大和臃肿。
Spring 的主要目标是使基于 POJO 的轻量级开发成为可能。作为开发人员,你应当能够专注于特定领域的业务逻辑而不是基础结构问题和费解的项目合同,应当能够依赖于框架来处理集成方面的事情。然而,当开发企业级应用时,却不可避免地要和很多这类事情打交道。因此,在某种意义上, Spring 确实打算做所有的事情,这些事情正是企业级开发人员期望企业级框架完成的。 Spring 支持如此众多的企业级服务和第三方产品,乍看起来确实有些庞大和臃肿,但是,为了给企业级软件开发提供一个综合的集成平台并同时支持全方位的基于 POJO 的开发, Spring 框架从一开始就设计为非侵入式的和模块化的,你可以并且应该对特定的项目只选择必需的东西,而当需求演变时,你可以不断地增加(或去除)模块, Spring 开发团队强调任何事情应尽可能简单,这不但适用于 Spring 本身,更适用于基于 Spring 构建的应用。
误解 2 Spring 对简单应用的开发过于强大了(杀鸡用牛刀)。
如上一点所述, Spring 框架可以帮助你保持事情应尽可能简单。你可以在刚开始时仅仅使用需要的部分,当需求更加明晰时再改造和扩展应用,这样一种(开发)环境对促进简单应用的开发是很有意义的,首先,即使是简单应用通常也需要一些企业级服务,如事务性的数据库访问,在这种情况下,最简单的选择也许就是依赖于 Spring 提供的集成式的数据访问和声明式的事务管理;此外,简单的(应用)原型可能以各种方式转变为成品应用,如果由你来负责这样的应用,你会心仪于一个轻量级的然而是可扩展的框架来处理这些需求。
误解 3 Spring 不能扩展到处理大型的应用。
Spring 已经被全球数百家最大的企业使用在非常大的应用中,在企业级开发环境中很好地使用着 Spring 框架以满足银行、政府部门、航空运输业的应用系统的需求。
Voca 公司就是一个例子,该公司为超过百分之七十的英国人口提供家庭帐单支付服务,并提供英国超过百分之九十的薪水支付服务,依赖于 Spring ,在 2005 年就处理了超过 50 亿个交易,最高日交易量达 7200 万。
其它能证明其对开发效率和性能的提升的大型基于 Spring 的应用还有由 Accenture 完成的法国税务部门的一个在线系统和欧洲专利局的一个企业级应用(据 SpringOne 2006 主题演讲,安特卫普,比利时)。
误解 4 Spring 强迫你使用还处在实验阶段的面向方面的编程( AOP )。
Spring 的一些强大功能得力于面向方面的编程或 AOP 技术(见第三、四章),但你总是可以选择是否使用这些特殊的特性,此外, Spring 2.0 已经显著地改进了与 AspectJ 的集成,这意味可以有越来越多的选择使用 AOP 的方式。很多用户通过使用 Spring 的基于代理的 AOP 已经对核心概念驾轻就熟,而当需要更为强大的功能时就开始使用 AspectJ
  在让冗长的说教左右你作出决定之前,有一些事情是必须知道的。首先, Spring 基于代理的 AOP 依赖于对 JDK 的动态代理机制的使用,这意味着这种功能实际上是被 Java 核心语言所支持的;其次, AspectJ 是经过多年研究形成的产品,现在已经成为相当完备的事实上的标准;第三, AOP 特别专注于面向对象编程的一个特定的局限性因而应当被看做一种补充性的而不是革命性的技术。
传统的面向对象编程不能模块化特定的 方面 因而导致代码重复和直交逻辑(如审计、安全性等)的散乱。一旦你越过了最初的学习曲线(其实是非常容易的), AOP 是一个非常自然的解决这些问题的方式。例如,在一个基于 Spring 的应用中,你可以为整个服务层提供事务管理而不需要修改任何代码。这就意味着应用更加灵活并且易于维护,同时保持代码纯粹地专注于业务逻辑。有了这些和其他类似的能力,你就会和越来越多的开发者一样,更加愿意开始 AOP 的实践。
误解 5 Spring 取代了 Java 企业版 (JEE)
这一点是关于 Spring 的最大的误解之一并且是最大的误导之一。实际上, Spring 的主旨在于 JEE 的集成, Spring 相对于传统的、重量级的、基于 EJB 的组件模型提供了一个值得关注的替代物,同时得力于其它 JEE 标准的全部功能。它的一个动机是简化 JEE API 的使用,以使开发者不必被迫重复编写大量的代码;另一个动机是鼓励解除应用程序代码和 JEE 服务之间的耦合。 Spring 提供了一致的方式以提高产能,同时提供了适当的抽象以提高灵活性。
Spring JEE API 的集成支持包括:
l       Java Message Service(JMS)
l       Java Management Extensions(JMS)
l       Java Transaction API
l       JEE Connector Architecture(JCA)
l       Java API fro XML-based Remote Procedure Calls(JAX-RPC)
l       JavaMail
l       Java Naming and Directory Interface(JNDI)
l       Enterprise JavaBeans(EJB) ,包括版本 3
对一些很重要的 Java 标准版的技术如 JDBC RMI 以及 JEE 版本 5 中的新增的 Java Persistence API(JPA 或称 EJB 版本 3 持久化规范 )Spring 也提供了支持。 Spring 一致性地使用同样的途径来集成较完善的第三方产品,如 Hibernate iBATIS Quartz Hessian 等等。
Spring JEE 集成从未基于“最小公分母”方式,而是尽最大努力保留访问底层技术的最大功能。换句话说,虽然意识到百分之八十的情况下只需使用百分之二十的功能,剩下的百分之八十的功能需要时仍然是可用的。
对这一问题的深入探讨,可参考Rod Johnson 和 Juergen Hoeller所著《Expert One-on-One J2EE Development without EJB》一书。
误解6: Spring EJB 是互斥的技术。
在前一点中,我们把 Spring 描述为 EJB 的“一个值得关注的替代物”,然而, Spring 促进了选择性 - 包括选择使用 EJB Spring 提供了实现 EJB 的支持类并使其可以访问 Spring 容器中的可管理的 Bean Spring 也提供了一个可配置的代理机制,使得 EJB 的客户端代码仅依赖于简单的业务逻辑接口。 EJB 远程访问的细节, JNDI 查找和相关的异常都隐藏于代理之后并由 Spring 进行管理。这种抽象在集成基于 EJB 的遗留代码和新开发的基于 POJO 的代码时是十分有用的,因为客户端不再关心这些细节,这种方式同时提供一条方便的从 EJB POJO 的移植路径。有趣的是,如果你选择使用 EJB3 和与其相关的基于 POJO 的持久化模型 (JPA) ,你会高兴地发现从基于 Spring 的应用进行移植比从基于较早版本的 EJB 应用进行移植要顺畅得多,而且,利用 Spring ,你可以得到 JPA 的所有优点而不必使用 EJB 3 的其它特性。
误解 7 Spring 不能象 EJB 3 那样利用 Java 5 的标注特性。
Pitchfork 项目,是 Spring 框架的一个补充,支持 JSR-250 JSR-220(EJB 3) 标注的一个子集,该项目是 Interface21 BEA 公司的一个合作成果,在 Apache 2.0 许可下发布。它不但提供了 WebLogic EJB 3 实现的基础,也使得通过 Spring 框架扩展 EJB 3 的编程模型成为可能。
Spring 2.0 的核心模块提供了对 JPA(EJB 3 的持久化机制 ) 的完整的集成的支持,包括其标注, 还增加了对@AspectJ类型的标注的支持 。其它对比标注的支持包括事务管理、 JMX 配置和依赖校验。
误解 8 :对大型的应用, Spring XML 配置文件会难以维护。
如果不进行适当的管理, Spring XML 文件确实会变得难于编辑和容易出错,对此我们会指出如何利用正确的工具和技巧来解决遇到的一些具体问题:
易于出错:使用合适的工具是必不可少的,一个 XML 文件编辑器可以借助于 DTD XML Schema Definition(XSD) 提供代码填充和校验。 Spring 2.0 主要的特点之一就是使用了基于 XSD 的配置 ( 文件 ) ,从而给( XML )编辑器提供了更多的信息。支持 Spring IDE ,如 InterlliJ Eclipse Spring 插件,提供了更多的功能,如类名的填充和在 bean 定义中获得属性的提示等,如果你可以从一个下拉列表中选择名称,就会节省时间并且不会产生任何输入错误。
难于通查
XML 文件应当拆解开来,以对应于应用系统模块的结构,就像代码一样,合理的做法是把相关的配置信息集中在一起并将不相关的部分清晰地分开。
对简单易变的属性(的维护)过于繁琐
某些键 / 值对应外置于属性文件中,这样就避免了每当这些简单的属性需要修改时都要修改 XML 配置文件。 Spring 提供了配置选项,使得当 bean 的定义中需要这些属性时就能找得到(见第 5 章)。
过多的重复定义
当通用的属性在大量的相关项目中都要进行设置时可以通过 Bean 定义的继承减少重复,例如:单一的“ dataSource bean 的定义可以满足很多数据访问 bean 对其的依赖,在此例中,只需一行(配置),一个抽象的父类定义就能提供这种共享属性。
过于宽泛
Spring 2.0 中一个主要的增强就是支持 XSD 和领域特定的名字空间,这就能够为很多常见的配置项目提供更准确的格式,这也为特定领域的 bean 定义提供名字空间或和其它框架的集成提供了方便。
误解 9 Spring 利用反射完成所有事情,因此会很慢。
Spring 并不是完全通过反射做所有的事,但确实大量使用了反射。因此我们应澄清 Spring 中反射的作用而且应探讨一下通常情况下反射的性能特征。
Spring 利用反射实现其依赖注入,但重要的是要知道这只发生在配置阶段(此时 bean 被关联起来)。从运行时的性能方面看,这与你特意地在 Java 代码中设置这些依赖没有什么区别。
Spring 通过标准的 JDK 动态代理对象在其 AOP 框架中使用反射,这些代理对象是特定地配置在粗粒度的服务层上,提供诸如事务管理、安全以及通过远程访问输出对象,如果对代理对象的方法的调用和执行涉及到网络和 / 或数据库访问,那么由于使用反射代理对性能造成的影响是可以忽略不计的。
在任何情况下,对性能产生影响的论断都应该基于相应的基准而不是主观判断或道听途说,如果你使用的是 Java 1.3 版本,那么有些关于反射的传统说法也许是对的,然而在 Java 1.4 版本中,反射 API 的性能提高了 2,000%
误解 10 Spring MVC 比较复杂,不象 Spring 的其它部分那样简单。
通过基于接口的设计, Spring MVC 的可配置性和可扩展性都十分强大,它利用了成熟的( well-established )设计模式,象策略模式(如 ViewResolver )和模板方法模式(如 SimpleFormController )。不幸的是,很容易将可配置性和可扩展性误认为是复杂性。对 Spring 中的所有东西,你可以并且应该使用需要的部分,但如果花些时间去学习一下还有什么东西可用将会对你大有益处。你将会乐于惊讶地发现每一个 Spring MVC 模块是如此简单和定义完好,每一个相关的单元都着重于实现 HTTP 请求的生命周期和生成页面过程中的一小部分功能,这就促进了业务逻辑和表现逻辑的解耦,进而使应用更加功能强大而灵活。一旦你在一个项目中使用了 Spring MVC 框架,你将会欣赏其强大和易用。用 Spring MVC 实现一个小而简单的项目确实是非常容易的。
 
Windows11搭建GPU版本PyTorch 开发环境教程 Windows11搭建GPU版本PyTorch环境详细过程 阅读详情

相关推荐

基于Python爬虫+词云图+情感分析对某东上完美日记的用户评论分析

随着互联网和社交媒体的发展,用户评论成为了消费者表达自己意见和情感的主要途径之一。对于企业来说,深入了解用户对其产品或服务的看法可以帮助他们更好地了解市场需求、产品改进的方向,以及消费者的情感倾向。因此,对用户评论进行分析已经成为了市场研究和商业决策的重要手段之一。

m0_64336780的博客 1万+

不使用Spring的5个理由

我不愿使用Spring有几个理由:1. Spring的配置臃肿我的项目组在开发一个企业级应用时,使用了依赖注入框架。这个项目中,有1500多个类,并且分散在超过11个的模块里。以我在实际开发中的经验,我们创建出的service对象应该少于依赖他们的其他对象。如果我们使用了Spring框架,当我们创建需要依赖100个service对象的1000个action对象时,这就意味者我们要对这1000个be

我的世界我的梦 1824

YOLO红绿灯目标检测数据集(含5000张图片)+对应voc、coco和yolo三种格式标签+划分脚本+训练教程.rar

1、YOLO红绿灯目标检测数据集,真实场景的高质量图片数据,数据场景丰富。使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测。2、附赠YOLO环境搭建、训练案例教程和数据集划分脚本,可以根据需求自行划分训练集、验证集、测试集。3、数据集详情展示和更多数据集下载:https://blog.csdn.net/m0_64879847/article/details/132301975

Spring的缺点

Spring的缺点? 我说一下我的感受吧,现在Spring越来越大,支持的东西越来越多,这就导致大多数开发人员对Spring的体系及结构都一知半解,用到某个东西的时候在网上乱七八糟的文章来回粘来粘去,有些时候甚至搞得人都分不清楚到底哪种使用方式是对的,因为越来越臃肿的体系,导致Spring的学习成本倍增。 ...

四水六年的博客 340

spring学习整理笔记(一)

spring学习整理笔记(一) 什么是spring spring是一个轻量级java开发框架。最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。他是一个分层的javaSE/javaEE full-stack(一站式)轻量级开源框架,为开发java应用程序提供了全面的基础框架支持。Spring负责基础架构,因此java开发者可以专注于应用程序的开发。 总结一句:解决企业级应用开发的复杂性,简化Java开发。 spring能做什么 Spring可以做的事情很多,核心

m0_46428628的博客 388

精通Spring?请吃我一狗腿!

我要是说,很多Java大牛,根本没有深入用过Spring。你可能会非常吃惊,因为Spring应用面如此广泛,特性如此之多,况且SpringSpringBoot、SpringCloud子孙三代,多次避免了Java的衰弱,功不可没,没有理由不深入了解一下。 Java能走到今天,Spring功不可没。要说Spring好,那是100个赞美之词都说不清的。夸到极致就是骂,我们只能说:Spring牛B! 但为什么很多大牛很少使用Spring呢?这也是由于工作特性决定的。他们经常写一些中间件,做一些分布式引用,这个时候

m0_57227221的博客 183

再说spring比较重,臃肿的看此文!!!!!

为什么80%的码农都做不了架构师?>>> ...

weixin_33919941的博客 808

Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试

偶然发现的,页面中没有引入Prototype和jQuery。控制台中敲$却发现是一个函数。又试着敲$$,也是个function。霍霍..   接着在各个浏览器中测试,发现Firefox/Chrome/Safari中有,IE9/Opera没有。   $ 相当于 document.getElementById $$ 相当于 document.querySelectorAll   在chr...

weixin_33889665的博客 92

Excalidraw在Chrome/Firefox/Safari上的表现差异

Excalidraw在Chrome、Firefox和Safari上的表现存在显著差异。Chrome凭借V8引擎和优化调度提供最流畅体验,Firefox注重标准兼容与稳定性,而Safari受限于JIT策略和连接管理,协作时易卡顿断连。实际使用中需根据场景选择浏览器,并通过降级策略提升兼容性。

weixin_33193177的博客 681

浏览器兼容性:Chrome/Firefox/Safari实测

Chrome是最理想的运行环境,推荐作为开发与测试基准;Firefox功能完整,仅需微调CSS即可达到一致体验;Safari尤其是移动端,存在显著的交互与布局挑战,需专项优化。🔧 核心结论即便后端模型与API高度稳定,前端兼容性仍是影响AI服务落地的关键环节。建议采用“渐进增强 + 容错降级”的策略,结合现代前端工程化工具链,确保服务在各类浏览器中都能提供可靠、一致的用户体验。

weixin_42601608的博客 1354

跨浏览器测试利器:WebDriver在Chrome、Firefox和Safari中的应用对比

WebDriver是一个强大的远程控制接口,能够实现对用户代理的检查和控制。它提供了平台和语言无关的有线协议,允许进程外程序远程指导Web浏览器的行为。作为W3C浏览器测试与工具工作组制定的标准,WebDriver已成为跨浏览器自动化测试的行业基准。 ## 为什么选择WebDriver进行跨浏览器测试? WebDriver的核心优势在于其标准化的设计理念: - **跨平台兼容**:支持Win

gitblog_00356的博客 903

Safari如何进行脚本调试【IE、Chrome、Firefox】

最近做浏览器兼容的时候发现Safari的脚本调试工具比较难找,因此与大家分享一下 1、找到脚本调试的选项 2、勾选此选项 3、在页面空白处右击打开调试窗口 4、看到下方的调试窗口了 细心的读者会发现,Safari的调试工具与Chrome用的是一个调试工具--Web Inspector。   另外也介绍一下其他几种浏览器的调试器打开方法: 1、IE:F12,这个我们经常会

jcx5083761的专栏 3万+

浏览器兼容性测试:Chrome/Firefox/Safari表现对比

Chrome、Firefox和Safari因引擎差异导致Web应用行为不一,尤其在文件处理、流式响应和认证机制上表现显著。Safari的资源回收、Firefox的隐私策略与Chrome的性能优势各具挑战,需通过立即读取、降级策略和显式凭据配置来应对。系统化测试与Polyfill是保障一致体验的关键。

weixin_30476025的博客 1659

Excalidraw浏览器兼容性测试报告(Chrome/Firefox/Safari)

本文深入测试Excalidraw在Chrome、Firefox和Safari中的表现,分析Canvas渲染、事件坐标、API支持等核心问题,提出基于能力探测、渐进增强和错误降级的兼容策略,确保跨浏览器一致体验。

weixin_42509888的博客 1077

LangFlow浏览器兼容性测试报告(Chrome/Firefox/Safari)

针对LangFlow在Chrome、Firefox和Safari中的实际表现,系统测试了功能完整性与交互流畅度。Chrome凭借优异的现代Web标准支持成为首选,Firefox稳定可靠,而Safari尤其在iOS上存在事件丢失与渲染卡顿问题。通过降级补丁、批量更新与PWA优化可缓解体验差异,但平台鸿沟仍需持续弥合。

weixin_28931507的博客 770

ComfyUI浏览器兼容性测试报告:Chrome/Firefox/Safari

本文对Chrome、Firefox和Safari在运行ComfyUI时的表现进行对比测试,重点分析其在节点渲染、WebSocket稳定性、Canvas性能等方面的差异,揭示浏览器如何影响AI工作流体验,并为不同使用场景提供推荐配置。

weixin_35671843的博客 614

safari浏览器开启javascript,safari怎么打开调试模式

1、IE:F12,这个我们经常会用到,或者工具【Tools】里面的菜单也可以打开,如果需要监控需要另外安装HttpWatch或者Fidder【别的浏览器也能用】插件。2、Chrome:Ctrl+Shift+j或者F12也能打开Developer Tools调试工具,对于调试前台的js来讲这个是必须的。3、Firefox:这个通常我们都会安装一个叫Firebug的插件:安装完成之后就会在浏览器的右上角看到一个小虫子图标的东东,就是它了。4、看到下方的调试窗口了。1、找到脚本调试的选项。

wenangou的博客 5954

前端开发浏览器推荐:4款主流浏览器组合(Chrome、Firefox、Edge、Safari)

前端开发推荐安装Chrome、Firefox、Edge和Safari四款主流浏览器组合,其中Chrome作为主力开发工具,Firefox开发者版专为CSS调试优化。Windows用户建议下载64位.exe安装包,企业部署可选MSI格式。开发完成后需进行多浏览器兼容性测试,可配合React/Vue DevTools提升调试效率。注意Windows无法安装新版Safari,建议使用BrowserStack等在线测试平台进行Safari兼容性测试。

Irene1991的博客 2764

firefox, IE, safari, chrome, opare用之初体验

干这行的,不装3个以上浏览器未免显太不够专业了,于是今天安装了safari 。本人一共装了firefox, IE8(可当IE7),Opera, Safari and chrome五款 主流浏览器。每次写页面的时候都要在不用的浏览器上进行测试,修改。最 终使其在每一种浏览器下的style保持一致。可惜只安装了个XP,不能体验其 他系统下的其他浏览器中s...

anjichan4261的博客 164
下一篇: Spring2.0正式发布了!
li_xw
博客等级 码龄20年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值