`
FeiXing2008
  • 浏览: 53815 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring与我的经验过程

阅读更多
刚刚学习Java不久,就听过Spring这个大名。估计这个是一个牛东西,不能不学。

来来去去也就那几样:IOC,AOP开始觉得没有什么用,应是自己不会用吧。

先说说简单地使用Struts2做Web时的经历:

1.经常需要在Action里边去使用JDBC去连接数据库,也就是说每个请求就连接一次数据库。而且业务逻辑与数据库控制代码都搞在一起,代码混乱,更不用说什么脱藕之类的东西。

2.之听说有数据源这个东西,先是使用了tomcat的数据源。我是在Action类的构造器里边去写了得到datasource对象的代码。这样得到connection就方便多了,不过代码依然很混乱。而且一些数据共享与交叉业务的东西多了,代码混乱得实在不行。像数据库CRUB操作都没有很好的封装。

3.我看了Hibernate才发现有DAO这个东西,不过我还没有使用Hibernate,我使用了JDBC去写了一个DAO,突然我的代码结构好好多,CRUB + Speical逻辑都放在DAO对象里边,每个DAO对象都有一个DataSource成员。猛地发现DAO有很多共性的地方,于是写了个CommonDAO,这里放了dataSource,其中还有从tomcat得到dataSource的逻辑。


4.在我的所有DAO成形后,发现CommonDAO帮了我大忙。不过我基本使用的是自动提交事务。之后我的一项测试发现(见贴:http://feixing2008.iteye.com/blogs/571478)手动提交事务是可以提向效率的。就在DAO里边加入了好多事务相关的代码。其实事务相关的代码基本都是相同的,不过都没有什么好的方法去摆在一个地方去统一管理事务。

5.虽然很多数据库操作逻辑都放去了DAO,从JE上看到了Properties文件,然页我程序就开始出现配置文件了。不过配置很简单,只需要一个jdni名称。

6.由于请求很多时候需要数据共享的,一开始时我都是放在session里边,之后发现内存大得要命,有时每次n请求的时候需要new一个DAO,这样不好,改进办法是写了一个单例,是一个Hashtable。需要共享的对象我都放在里边了。在请求来时,再通过名字去找,也就是一个单例管理器。不过我发现,有些对象是打算一启动建好的,而这样做只是在第一个请求时去做,像一些DAO对象,是在启动后第一次请求。一直没有很好的办法在程序一启动时就会创好对象。

总结一下以上问题:
A.没有将业务逻辑代码与数据库控制代码分开。
B.只能通过JNDI拿数据源。数据源配置放在Tomcat里了。
C.事务管理代码重复。
D.每个请求都需要实例化一些资源对象,效率不高。
E.管理资源对象逻辑时间不确定,到处都是资源管理代码。
F.代码之间依赖性很强,项目代码基本不可能再复用。

之后加入新组,使用的是SSH框架所做的项目,发现Spring原来是这样子用的:
1.项目分成三层:Action,Service,DAO结构非常清晰。

2.Action里都是页面控制逻辑,也就是控制显示哪个项目。数据怎么来?
只需要写一个xxxService成员,加上@Resource注解,Spring会帮你按成员名称去注入这个对象。
形象一点说,也就是给你你想要的东西。你想要什么,写好成员加个注解,没有就报错,有就给你。

3.然后到Service层也是,如果你要某某DAO对象,很简单,写个成员,加个注解,你就有啦。DAO层同理。
所以都基本不用你去new这个东西,只需要Spring去帮你new。

4.原来Spring就是一个很大的桶,也是相当于我之前的那个Hashtable的方式去管理单例。不过Spring比我强大得多,不需要主动去拿,只说“我要”。

5.为什么Spring知道你这个类需要某某对象呢?其实很简单,因为是他将你生出来的,也就是说,它不仅仅是一个单例管理器,而且是一个工厂。所有东西都是他生出来的。而是什么叫他生的?就是通过AppliactionContent.xml之类的配置文件。我用的是2.5,可以使用注解,Spring会通过配置去搜索包里的类,如果有“我受你管理”之类的注解,就会实例,放在自己这个桶里。

6.Spring顺便在实例时,看看你需要什么东西,也就是看你成员有什么注解,你要什么我就给你什么。

7.Spring在什么时候去实例这些对象呢?如果你在普通的程序是,那当然是new XMLBeanFactory这个时候运启动Spring容器,当然不一定马上去new,启动懒加载时,要在你去拿的时候才new.
而在Web之中是在实例监听器时启动Spring的,其实在Web容器中是以监听器的身份出现。然而解决了多之前所说的管理资源对象的问题。

8.一方面拿资源对象时方便了,但是造资源对象这个问题怎样了,有了Spring轻松多了,只需要配置一个,像我喜欢用jdbc的,只需要在Spring里配一个数据源,这个数据源选择可以有很多,apache的dbcp,C3P0,XAPool 等等,都可以在Spring里边配,换了也无须改代码。

9.光光使用jdbc也不是很方便,我可以使用jdbcTemplate,这个是Spring额外给的一个工具,很不错,不用自己去关connection。还可以直接然数据装成List对象。

10.AOP事务管理,实际上就是让Spring所管理的某些类的对象的某些方法调用前与调用后,加插一些方法,如在所有以Service结尾的类中所有add开头的方法调用后就提交事务。也并没有书上说得那么复杂。

Spring用处总结:
A.Spring生你出来,具体怎么生成,通过配置去告诉Spring,之后生成的样子,在程序中感觉一样.
B.如果你是受Spring管理的,那样你可以说要主义,只需要说:“我要XX对象”,不需要写代码去拿。
C.如果你是受Spring管理的,你在做某些事情前后,会跟着,像保姆一样,怕你没有手尾。
D.额外给你一些工具类,让你受益非浅。

最后,我对Spring其实了解还不够深入,只是它让我受益非浅。其中上边很多误解与错误,希望大家抱着怀疑的心态,并多多批评,防止我误人子弟。THX
分享到:
评论
13 楼 hesy_007 2010-02-04  
speed000 写道
“悲剧,SPRING LZ您算白用了。SPRING当初是以简洁为开发思想的,代替繁杂的EJB过程,于降低开发难度,但是有许多地方被抛弃,不过对于大部分项目来说,影响不大。“

正在学SPRING,下载后187.2M, 所以不讨明白简洁在哪里了?有经验的人士是否可解释试一下?



可以选择核心的模块下载啊,其他的像MVC之类的,不用就不要下了。
12 楼 crazy.j 2010-02-04  
speed000 写道
“悲剧,SPRING LZ您算白用了。SPRING当初是以简洁为开发思想的,代替繁杂的EJB过程,于降低开发难度,但是有许多地方被抛弃,不过对于大部分项目来说,影响不大。“

正在学SPRING,下载后187.2M, 所以不讨明白简洁在哪里了?有经验的人士是否可解释试一下?


就是提供给你一个良好的方式组装程序的所有元素 其中为你解决了一些通常来讲比较枯燥的东西
11 楼 zhouweijava 2010-02-04  
lichao8858749 写道
直接在代码里new对象的时候,对象之间耦合太多,关系也比较复杂。 代码不好,还会影响GC的效率。Spring通过注入式编程, 将对象的管理,级联关系等全都很多的包容在这个容器里, 无论是效率,安全性等等都要好的多。


很好,+1

以前学spring的时候,第一认识就是不用再通过new去构造对象..方便了很多,效率也高了很多.

LZ总结的很通俗易懂,赞个!!
10 楼 luckaway 2010-02-04  
不错! 分层并不是spring提出来的。

其实spring就是更抽象的工厂类! 解耦类与类之间、层与层之间的耦合。



9 楼 treblesoftware 2010-02-04  
speed000 写道
“悲剧,SPRING LZ您算白用了。SPRING当初是以简洁为开发思想的,代替繁杂的EJB过程,于降低开发难度,但是有许多地方被抛弃,不过对于大部分项目来说,影响不大。“

正在学SPRING,下载后187.2M, 所以不讨明白简洁在哪里了?有经验的人士是否可解释试一下?




spring的初衷是什么?简单的开发过程,简单的测试过程,简单的部署过程。你拿现在的SPRING与当初的EJB2拿来对比一下你就知道了,当然如果你现在跟EJB3比那么已经没什么必要了。现在大多开源或非开源的东西已经几乎全部靠近已POJO的思想来开发了,虽然EJB3仍提供了它本身应该做的事,但是只是个简单的@ejb而已。SPRING现在虽然大,但是它仍然是以IOC原则为中心,其他一些附带功能,占了它许多M而已,你完全可以不用。你完全可以只用SPRING提供的部分功能,IOC,AOP,整合器。老话一句,简洁不在于它有多大的M,而在于开发过程与思想是否简洁.
8 楼 speed000 2010-02-04  
“悲剧,SPRING LZ您算白用了。SPRING当初是以简洁为开发思想的,代替繁杂的EJB过程,于降低开发难度,但是有许多地方被抛弃,不过对于大部分项目来说,影响不大。“

正在学SPRING,下载后187.2M, 所以不讨明白简洁在哪里了?有经验的人士是否可解释试一下?

7 楼 zcy860511 2010-02-04  
就打个简单的例子,LOG,其实在一开始我们所有Service都应该使用工厂的方式提供,并且为外部提供接口实现,让内部完全隐藏起来,那么在添加log的时候就完全可以使用静态代理实现,和其他代码不耦合,这样不需要AOP也能实现log。

当然,你觉得这样的代码量太大,其实不然,只需要提供一个基础log实现,那么你只需要为方法添加一点点代码而已,毕竟AOP也不能在现有代码行间添加调用吧
6 楼 zcy860511 2010-02-04  
要效率还是考虑最原始的写法,封装永远只会增加系统负担,最原始的东西效率是最高的,其实面向对象本身就存在效率,毕竟多调用一个方法,底层会变就会去实现一个push、pop的环境保存过程,至少5微毫秒。。。这个是我机器上测试出来的。。。。

框架也好、面向对象也好,这些都是为了增加可读性而产生的,我们还是应该考虑效率的同时去考虑更好的架构

一个好的架构在于高效、高可读性、高复用性、高扩展性,我不看好AOP,至少AOP对于我的感觉是臃肿,很多AOP的实现都可以寻找到现有的方式去架构,只是很多时候我们没有完善的架构才导致不得不考虑用AOP的方式
5 楼 foxlish 2010-02-03  
Spring简单的说就是一个粘合剂
4 楼 treblesoftware 2010-02-03  
悲剧,SPRING LZ您算白用了。SPRING当初是以简洁为开发思想的,代替繁杂的EJB过程,于降低开发难度,但是有许多地方被抛弃,不过对于大部分项目来说,影响不大。以IOC为指导的SPRING的真正经验就是:

IOC的真正作用在于可以让零散部分组成一个整体,而这些整体并不在意之间彼此的细节,从而达到了真正的物理上的疏散耦合,而非逻辑,有了IOC之后,我们可以让SPRING充当各框架中的整合器,把技术框架进行完美的结合。

而你总结的许多东西是技术细节,许多技术框架可以替代,这些并不是SPRING的最初目的。
3 楼 lichao8858749 2010-02-03  
直接在代码里new对象的时候,对象之间耦合太多,关系也比较复杂。 代码不好,还会影响GC的效率。Spring通过注入式编程, 将对象的管理,级联关系等全都很多的包容在这个容器里, 无论是效率,安全性等等都要好的多。
2 楼 llyzq 2010-02-03  
LZ总结和表达得很不错哦

虽然正在学习struts hibernate,spring还没学

不过现在基本知道spring会干些什么事情了
1 楼 vlinux 2010-02-03  
同感000

相关推荐

    工作中用到的spring项目经验

    本经验总结主要围绕“工作中用到的Spring项目经验”展开,旨在分享实际项目中Spring的应用技巧和最佳实践。 1. **Spring概述**:Spring是一个开源的Java平台,它简化了开发过程,提供了依赖注入(Dependency ...

    Spring技术内幕:深入解析Spring架构与设计原理(第2版) .pdf

    《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》这本书主要聚焦于Spring框架的核心架构和技术细节,帮助读者全面理解Spring的工作机制、设计理念以及实现方式。下面将根据书名及其描述来展开相关知识点。 ...

    SpringCloud 15个完整例子

    11. **Spring Boot**:Spring Boot是构建微服务的基础,它简化了Spring应用的初始搭建以及开发过程,提供了一种快速、生产就绪的微服务开发方式。 12. Maven项目结构:这个压缩包中的项目都是基于Maven构建的,...

    跟我学spring3

    "跟我学spring3-源码.rar"包含了示例代码,方便读者实践操作,"更多电子书.url"和"PDF阅读器下载.url"则是其他资源的链接,可以帮助你在学习过程中获取更多相关资料。 总的来说,《跟我学Spring3》是一本全面而实用...

    SpringCloud中文文档

    Spring Cloud 的目标是提供良好的开箱即用经验和可扩展性机制,覆盖分布式系统中的所有组件。它提供了多种具体方式来促进云原生应用程序的开发风格,鼓励在持续交付和价值驱动开发领域轻松采用最佳实践。 Spring ...

    SPRING技术内幕+深入解析SPRING架构与设计 55M(下载地址)

    ### Spring技术内幕与深入解析Spring架构与设计 #### 书籍概述 本书《Spring技术内幕+深入解析Spring架构与设计》是一本专为Spring框架开发者所撰写的深度技术指南。作者凭借超过十年的Java开发经验,从Spring 3.0...

    spring攻略 第2版

    Spring Boot是Spring的另一个重要组成部分,它简化了Spring应用的初始设置和运行过程,通过默认配置和"起步依赖"极大地提高了开发效率。 Spring Data项目则为各种数据存储提供了统一的访问接口,包括JPA(Java ...

    springcloud视频学习

    2. SpringBoot与SpringCloud的结合:SpringBoot简化了Spring应用的初始搭建和配置过程,而SpringCloud则是基于SpringBoot实现的一套微服务解决方案,两者结合可以快速构建微服务应用。 3. 创建并部署第一个Spring...

    DWR与SPRING 集成

    博文链接提供的 `https://json20080301.iteye.com/blog/1892385` 可能是一个关于DWR与Spring集成的教程或经验分享,可以进一步深入学习。 总之,DWR与Spring的集成是提升Web应用交互体验的有效手段,通过合理的...

    Spring Framework 6 中文文档

    Spring的历史可以从其诞生背景和演进过程来理解,它从一个轻量级的IoC容器发展成为现代企业级应用开发的基石。设计理念上,Spring强调简洁、模块化和可测试性,鼓励依赖注入和面向切面编程(AOP),以促进代码的解耦...

    精通spring - Mastering Spring.pdf

    Spring框架的主要目标是简化企业级应用程序的开发过程,提高开发效率和降低复杂度。Spring框架通过其核心特性如依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP),使得...

    Spring中文API帮助文档

    6. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建和运行过程,通过“起步依赖”(Starter POMs)自动配置,可以快速创建独立运行的、生产级别的应用。 7. **Spring Data**:这个模块旨在简化数据访问,...

    spring学习.zip

    陈韶健.pdf》**:这本书详细介绍了Spring Boot,它是Spring框架的简化版,旨在简化Spring应用的初始搭建以及开发过程。书中会讲解Spring Boot的核心特性,如自动配置、起步依赖和Actuator等,并通过实例展示如何快速...

    learning spring boot 2.0

    Spring Boot是一种基于Java的开源框架,旨在简化新Spring应用的初始搭建以及开发过程。它使用了“约定优于配置”的原则,提供了一种快速上手的方法,使得开发者可以更专注于业务逻辑的开发而不需要花费太多时间在...

    spring5.2.8.zip

    Spring与许多其他框架和库有良好的集成,如MyBatis、Quartz等。在5.2.8中,这些集成得到了更新,以兼容最新的第三方版本,确保了整体项目的兼容性。 9. **文档和社区**: Spring官方文档在5.2.8版本中也进行了...

    spring-5.3.14-dist.zip(spring-framework-5.3.14)

    开发者可以根据这些schema编写符合规范的Spring配置文件,使得配置过程更加规范和高效。 五、使用技巧与最佳实践 1. 利用Spring Boot简化配置:Spring Boot是基于Spring Framework构建微服务应用的快速启动器,可以...

    Spring技术内幕 - 深入解析Spring架构与设计原理.rar

    《Spring技术内幕 - 深入解析Spring架构与设计原理》这本书是IT领域的经典之作,专为想要深入了解Spring框架的开发者而准备。Spring作为Java领域最广泛应用的轻量级框架,其设计理念和实现机制一直是广大程序员关注...

    一本很好的Spring好书和spring的API

    学习Spring的过程中,理论知识与实践操作相结合至关重要。你可以先通过阅读书籍理解Spring的基本原理和工作流程,然后在实际项目中运用API来解决问题。Spring API CHM文件可以作为你编码时的实时参考,遇到不熟悉的...

    spring揭秘 完整带标签

    5. **Spring Boot**:为简化Spring应用的初始搭建和运行过程,Spring Boot应运而生。它预设了许多默认配置,使得开发者可以快速启动项目,同时支持自动配置和嵌入式Web服务器。 6. **Spring Data**:Spring Data是...

    传智播客2016spring资料4

    8. **Spring Boot**:如果是较高级的内容,可能会提及Spring Boot,它是快速构建和运行Spring应用的框架,简化了配置和启动过程。 文件列表“day04”可能包含了该天课程的源代码、PPT课件、笔记文档或练习项目。...

Global site tag (gtag.js) - Google Analytics