zoukankan      html  css  js  c++  java
  • Spring与我的经验过程

    转自 http://www.javaeye.com/topic/585776
    刚刚学习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.javaeye.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
  • 相关阅读:
    Web Client Software Factory 开发路线图
    Castle ActiveRecord Hands On Lab(1):基本数据访问
    古代武侠武功与现代软件开发
    微软Code Snippet Designer Alpha版发布了
    MSDN WebCast网站全新改版
    AJAX,只是一种过渡技术吗?
    中文网站排行榜:博客园位居博客类16名
    ASP.NET AJAX JavaScript 类浏览器
    .NET开源项目介绍及资源推荐:序
    微软发布WF教程及大量示例
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400353.html
Copyright © 2011-2022 走看看