`
dreamer_0924
  • 浏览: 179921 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

spring study 转载

阅读更多

Spring学习笔记:1、概念理解

对Spring耳闻已久,但一直没有时间和心情去看它,最近它的声音是越来越大了,Java视线http://forum.iteye.com/有不高手在谈论它。于是趁着有空闲时间,我也花了两个晚上看了看Spring,看的是夏昕的<Spring开发指南>http://www.xiaxin.net/Spring_Dev_Guide.rar,文章写得不错。以下谈谈我的学习感受

一、Spring的IoC(Inversion of Control)。
这是Spring中得有特点的一部份。IoC又被翻译成"控制反转",也不知道是谁翻译得这么别扭,感觉很深奥的词。其实,原理很简单,用一句通俗的话来说:就是用XML来定义生成的对象。IoC其实是一种设计模式,Spring只是实现了这种设计模式。

这种设计模式是怎么来的呢?是实践中逐渐形成的。

第一阶段:用普通的无模式来写Java程序。一般初学者都要经过这个阶段。
第二阶段:频繁的开始使用接口,这时,接口一般都会伴随着使用工厂模式。
第三阶段:使用IoC模式。工厂模式还不够好:(1)因为的类的生成代码写死在程序里,如果你要换一个子类,就要修改工厂方法。(2)一个接口常常意味着一个生成工厂,会多出很多工厂类。
    可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java 的"反射"编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是 把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

    IoC中最基本的Java技术就是"反射"编程。反射又是一个生涩的名词,通俗的说反射就是根据给出的类名(字符串)来生成对象。这种编程方式可以让对象 在生成时才决定要生成哪一种对象。我在最近的一个项目也用到了反射,当时是给出一个.properties文本文件,里面写了一些全类名(包名+类名), 然后,要根据这些全类名在程序中生成它们的对象。反射的应用是很广泛的,象Hibernate、String中都是用"反射"做为最基本的技术手段。

    在过去,反射编程方式相对于正常的对象生成方式要慢10几倍,这也许也是当时为什么反射技术没有普通应用开来的原因。但经SUN改良优化后,反射方式生成对象和通常对象生成方式,速度已经相差不大了(但依然有一倍以上的差距)。


    所以要理解IoC,你必须先了解工厂模式和反射编程,否则对它产生的前因后果和实现原理都是无法理解透彻的。只要你理解了这一点,你自己也完全可以自己在程序中实现一个IoC框架,只不是这还要涉及到XML解析等其他知识,稍微麻烦一些。


    IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。

    IoC最大的缺点是什么?(1)生成一个对象的步骤变复杂了(其实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象 生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3) 缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

    总的来说IoC无论原理和实现都还算是很简单的。一些人曾认为IoC没什么实际作用,这种说法是可以理解的,因为如果你在编程中很少使用接口,或很少使用 工厂模式,那么你根本就没有使用IoC的强烈需要,也不会体会到IoC可贵之处。有些人也说要消除工厂模式、单例模式,但是都语焉不详、人云亦云。但如果 你看到IoC模式和用上Spring,那么工厂模式和单例模式的确基本上可以不用了。但它消失了吗?没有!Spring的IoC实现本身就是一个大工厂, 其中也包含了单例对象生成方式,只要用一个设置就可以让对象生成由普通方式变单一实例方式,非常之简单。

   总结:
   (1)IoC原理很简单,作用的针对性也很强,不要把它看得很玄乎。
   (2)要理解IoC,首先要了解"工厂、接口、反射"这些概念。


二、Spring的MVC

如果你已经熟悉Struts,那么不必把MVC做为重点学习内容。基本上我认为Spring MVC是一个鸡肋,它的技术上很先进,但易用性上没有Struts好。而且Struts有这么多年的基础了,Spring很难取代Struts的地位。这 就是先入为主的优秀,一个项目经理选用一种框架,不能单纯的从它的技术上考虑,还有开发效率,人员配置等都是考虑因素。但做为研究性的学习,Spring 的MVC部份还是蛮有价值的。


三、数据库层的模板
Spring主要是提供了一些数据库模板(模板也是一种Java设计模式),让数据部分的代码更简洁,那些try...catch都可以不见了。这个的确是个好东东。


四、AOP

AOP又称面向方面编程,它的实现原理还是用了反射:通过对某一个种类的方法名做监控来实现统一处理。比如:监控以"insert"字符串开头的方 法名,在这种方法执行的前后进行某种处理(数据库事务等)。但这里我有一个疑问?不一定所有以insert开头的方法都是数据库操作,哪么当某个 insert开头的方法不是数据库操作,你又对它进行了数据事务的操作,这样的错误如何防止???我对这方面了解不深,还是只知道一个大概。


曾看过一个程序员发出这样的感慨:"框架一个接一个,学也学不完,而且有必要吗?这样一层层的加上框架,还不如直接写JSP来得直接,效率 还高"。我想这种困惑很多人都有吧?但如果你经过的项目渐多,就会发现,维护项目要比开发项目更艰难,代价更大。那种用JSP直接来写,层次又不清楚的开 发,往往最后得到一个不可再修改的软件,一团乱麻,移一发而动全身。但软件不象电视机,做好了就不会改动了,软件是一个变化的事物,用户的需求随时会改 变,这时你会体会到分层和使用框架的好处了,它们为你做了软件中很多和业务无关的工作,你可以只关注业务,并减少代码量。唯一缺点就是有一个学习的代价, 框架配置上也较麻烦。


学习框架,我认为应该:第一步,了解这个框架中的一些关键概念,它的具体含义是什么。第二步,了解这个框架的精华在哪里,它能对开发起到什 么样的作用,最好能对它的原理有一定的了解。第三步,用这个框架来写几个例子,实际体会一下。我现在还是刚刚大概完成了前两步,这几天会再看看 Spring的文档并用Spring写几个例子,到时一起发出来。

另外,很赞赏<Spring开发指南>的作者夏昕的观点,将自已的经验写成文档公开出来,不过一个人的力量终究太弱。最好能够形成一个 组织,对一种新技术,由一两个人出一个大纲,大家把它分了,更写一章,然后由两三个人总集起。我个人感觉,由于英文语言的关系,新技术引进到国内的还是太 慢了,至少要比国外慢上一年以上,成立一个开源文档组织还是很有意义的事。

分享到:
评论

相关推荐

    基于Java的Spring-Study Kuang shen Spring study设计源码

    本项目是基于Java的Spring-Study Kuang shen Spring study设计源码,包含161个文件,其中包括53个XML文件、48个Java源文件、48个Class文件、7个Iml文件、2个Kotlin Module文件、1个Name文件、1个Markdown文档、1个...

    springStudy .zip

    《Spring框架基础学习指南》 在Java开发领域,Spring框架无疑是最重要的工具之一,它以其...在这个过程中,官方文档是我们的主要参考资料,而本文档“springStudy”中的示例将帮助我们更好地理解和实践这些理论知识。

    spring-mvc-study.zip

    在本项目"spring-mvc-study.zip"中,我们可以深入理解并实践Spring MVC的核心概念和技术。 首先,Spring MVC是Spring框架的一个模块,主要用于处理HTTP请求和响应。它的主要组件包括DispatcherServlet、Controller...

    springstudy.zip

    在本项目中,"springstudy.zip" 包含了一个基于 SpringBoot 和 MyBatis 框架构建的应用程序。SpringBoot 是一个简化 Spring 应用程序初始搭建以及开发过程的框架,而 MyBatis 是一个优秀的持久层框架,它支持定制化 ...

    Spring Professional Certification Study Guide

    《Spring Professional Certification Study Guide》是一本专为准备Spring专业认证考试的考生量身打造的指南。这本书涵盖了Spring框架的核心概念、关键技术和最佳实践,旨在帮助读者深入理解Spring框架,并为考试...

    springstudy

    【标题】"springstudy" 涉及到的是Spring框架的学习和应用,特别是Spring Batch的批量处理特性。Spring Batch是Spring框架的一个模块,专门用于处理批量数据操作,如大规模数据导入导出、定期任务执行等。 【描述】...

    spring study action

    "Spring Study Action" 提供了一个学习Spring框架的机会,特别是关于`ActionForm`的使用,这在Web应用程序开发中是关键的一部分。在本文中,我们将深入探讨Spring框架,以及`ActionForm`在其中的作用。 首先,让...

    SpringStudy_JDBC.zip

    《Spring与JDBC深度解析》 在Java世界中,Spring框架以其强大的功能和灵活的架构设计,成为企业级应用开发的首选。而JDBC(Java Database Connectivity)作为Java与数据库交互的标准接口,是每个Java开发者必备的...

    springStudy

    SpringStudy 是一个与Java相关的学习资源,特别是针对Spring框架的深入研究。Spring是Java开发中最广泛应用的开源框架之一,主要用于构建企业级应用。这个压缩包可能包含了一个完整的Spring项目示例,或者是学习教程...

    spring-study-全日志输出的jar包

    "spring-study-全日志输出的jar包"为此提供了便利,它允许我们详细观察Spring框架如何处理各种任务,从而加深对Spring机制的理解。这个特殊的jar包包含了多个Spring核心组件,如`spring-core.jar`, `spring-context....

    Spring-study.rar

    "Spring-study.rar"这个压缩包很可能是包含了一系列Spring框架的学习资源,包括代码示例、教程文档等,旨在帮助开发者掌握Spring的核心概念和实践技巧。 首先,Spring框架的核心是IoC(Inversion of Control)容器...

    spring-study.zip

    在这个"spring-study.zip"压缩包中,我们可以期待找到一系列关于Spring5学习的资源,包括示例代码、教程文档和可能的笔记。 首先,让我们深入了解一下Spring5的主要特性: 1. **Java 8支持**:Spring5全面支持Java...

    spring_study.zip

    "spring_study.zip"这个压缩包文件显然是一个学习Spring框架的资料集合,包含了作者在学习Spring过程中创建的各种示例和练习项目。 Spring 5是该框架的最新版本,它带来了许多增强和新特性。首先,Spring 5对Java 8...

    spring-study.rar

    "spring-study.rar" 是一个压缩包,包含了学习 Spring 框架的相关资料,可能是源代码、笔记或者其他教程资源,旨在帮助学习者深入理解并实践 Spring 技术。 Spring 的核心特性包括依赖注入(Dependency Injection,...

    Spring-study-master.zip

    "Spring-study-master.zip"是Bilibili狂神老师精心制作的一份Spring学习资源,包括了全代码和详细的笔记,旨在帮助开发者深入理解Spring框架并提升编程技能。 首先,我们来看Spring的核心概念——依赖注入...

    spring-cloud-study-websocket.zip

    通过深入学习和实践"spring-cloud-study-websocket.zip"中的内容,开发者将能够熟练掌握在Spring Cloud环境中如何利用WebSocket实现高效的实时通信,为构建高性能的分布式系统提供可能。此外,理解WebSocket的工作...

    spring study basic

    《Spring学习基础详解》 Spring框架作为Java领域最流行的开源框架之一,它的学习对于任何Java开发者来说都是至关重要的。本文将深入浅出地探讨Spring的基本概念、核心特性以及实际应用,帮助初学者建立起对Spring...

    Spring-Study-master JAVA学习实例

    在Spring框架的学习中,"Spring-Study-master JAVA学习实例"是一个综合性的项目,它涵盖了Spring框架的核心特性,尤其是关于事务管理的部分。这个实例通过一系列测试用例,帮助开发者深入理解如何在Spring中处理事务...

Global site tag (gtag.js) - Google Analytics