隨筆 - 4  文章 - 10  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Spring 這么多內(nèi)容該看哪些? 我就根據(jù)我的理解談一些個(gè)人的觀點(diǎn), 僅供參考. 歡迎討論.

          首先學(xué)習(xí) Spring 等框架應(yīng)該本著簡(jiǎn)化程序員負(fù)擔(dān), 加快開(kāi)發(fā)速度的原則來(lái)進(jìn)行, 而不是把框架的知識(shí)點(diǎn)都給學(xué)習(xí), 練習(xí)一遍. 另外用 Spring 的時(shí)候也要注意不要過(guò)渡依賴(lài) Spring 框架, 注意它們的宣傳語(yǔ)是: 無(wú)侵入, 輕量級(jí). 所以, 除非必要, 千萬(wàn)不要讓 Spring 侵入你的代碼啊, 例如哪些 Aware 接口, 不也是變相的侵入了你的代碼嘛. 還有不要為了 Spring 而 Spring, 明明一段代碼用 new JavaBean().setUsername("xxx") 這樣的方式非常簡(jiǎn)練, 你非要整出個(gè) bean 的配置文件來(lái), 純屬多此一舉. 所以無(wú)侵入只是個(gè)相對(duì)概念, 代碼寫(xiě)少了, 但是 bean.xml 配置文件和 Spring.jar 你不能丟吧, 所以你已經(jīng)被 Spring 侵入了, 而且以后想換第二家公司來(lái)做個(gè)框架解析你這些 XML 文件都困難呢, 因?yàn)?Spring 本身并不是可替換或者熱插拔的, 換句話(huà)說(shuō)所有用 Spring 的代碼都已經(jīng)被綁定到了 Spring 框架上.  好了, 先說(shuō)一下目前了解的 Spring 的主要應(yīng)用場(chǎng)合.

          1. 依賴(lài)注入, 主要是把一些需要經(jīng)常修改的內(nèi)容提取為 Bean, 也是盡量能不提取就不提取, 要不然到最后那個(gè) bean.xml 增加到了幾千行你也就不會(huì)覺(jué)得這時(shí)候有什么方便的地方了;

          2. 整合 Hibernate, 這個(gè)可以說(shuō)是最強(qiáng)大最實(shí)用的功能了, 也是為什么一提到 Spring 后面總是跟著 Hibernate 的原因. 在文檔的 12.2. Hibernate 有相關(guān)的介紹. 例如看看下面的調(diào)用代碼:

          import java.io.IOException;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;

          import dao.Testuser;
          import dao.TestuserDAO;

          // 調(diào)用 Hibernate DAO
          public class Test {

           public static void main(String[] args) throws IOException {
            ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            TestuserDAO dao =(TestuserDAO)context.getBean("userDAO");
            Testuser user = new Testuser();
          //  user.setxxx..., 設(shè)置值.
            dao.save(user);
           }

          }


          再看 DAO 的代碼:

          package dao;

          import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

          /**
           * Data access object (DAO) for domain model class Testuser.
           */

          public class TestuserDAO extends HibernateDaoSupport {


           public void save(Testuser transientInstance) {
            getHibernateTemplate().save(transientInstance);
           }

           public void delete(Testuser persistentInstance) {
            getHibernateTemplate().delete(persistentInstance);

           }

          }

          是不是感覺(jué)簡(jiǎn)單到令人難以置信?  要保存的實(shí)體 POJO 也很簡(jiǎn)單:
          package dao;

          /**
           * Testuser generated by MyEclipse Persistence Tools
           */

          public class Testuser implements java.io.Serializable {

           // Fields

           private Integer id;

           private String username;

           private Integer age;
           
           getXXX();
           setXXX();
          }

          然后我們看主要的配置文件 applicationContext.xml 的內(nèi)容:
          <?xml version="1.0" encoding="UTF-8"?>
          <beans
           xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

           <bean id="userDAO" class="dao.TestuserDAO">
            <property name="sessionFactory">
             <ref bean="hibernateSessionFactory" />
            </property>
           </bean>

           <bean id="hibernateSessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="configLocation"
             value="file:src/hibernate.cfg.xml">
            </property>
           </bean>

          </beans>

          大家可以看到 DAO 的  HibernateSessionFactory 完全是配置出來(lái)的, 不用我們寫(xiě)一行 Hibernate 初始化的代碼, Spring 已經(jīng)幫我們做好了一切. 完整的代碼大家可以下載附件. 但是大家也請(qǐng)注意, 我們的代碼這樣做也是依賴(lài)了 Spring 的框架, 其實(shí)功能強(qiáng)大和不依賴(lài)具體的框架本身就是個(gè)謬論, 你不用(依賴(lài))它的框架又怎么能用到它的強(qiáng)大的功能呢?

          3. 使用 JDBCTemplate 簡(jiǎn)化普通的 JDBC 代碼編寫(xiě), 這個(gè)大家可以去看參考文檔(官方的 Spring Framework 開(kāi)發(fā)參考手冊(cè), 中英文均可) " 第 11 章 使用JDBC進(jìn)行數(shù)據(jù)訪問(wèn)", 老師也介紹過(guò)了.

          4. 整合 Struts, 也參考文檔里的內(nèi)容, 具體是 15.4. Struts., 讓 Struts 的 Action 可以被注入內(nèi)容.

          5. AOP 功能, 我沒(méi)用過(guò), 只是聽(tīng)一些朋友介紹說(shuō)他們用的有, 所以建議大家了解一下, 個(gè)人覺(jué)得挺難理解, 開(kāi)發(fā)的時(shí)候也是完全依賴(lài) Spring 的 API, 比較難做. AOP 是 Spring 后來(lái)加入的內(nèi)容, 按照官方文檔是"錦上添花的內(nèi)容", 其實(shí)就是捆綁了自己的 AOP, 而 Spring 最核心的內(nèi)容當(dāng)屬依賴(lài)注入功能.

          6.  事務(wù)管理, 據(jù)說(shuō)有一些人在用. 但是感覺(jué)開(kāi)發(fā)起來(lái)挺費(fèi)勁的, 不如 EJB 3 的標(biāo)注來(lái)的簡(jiǎn)便. 不過(guò)你被綁在了 Spring 框架上, 一般就只好用它自己做的這些個(gè)功能了.

          7. 其它的 Spring MVC 等內(nèi)容, 都是可選項(xiàng), 具體來(lái)說(shuō)開(kāi)發(fā)工具支持上并不如 Struts 來(lái)的那么直接好用.

          至于 Spring 的缺點(diǎn):
          1. 不支持分布式訪問(wèn),分布式事務(wù)和集群, 這些是 EJB 3 的優(yōu)點(diǎn), 但是 Spring 目前還不支持;
          2. 配置使用 XML 文件, 如果文件內(nèi)容很多的話(huà)對(duì)維護(hù)的人來(lái)說(shuō)是個(gè)負(fù)擔(dān);
          3. 提供 Spring 容器的只有一家公司(Interface21), 換句話(huà)說(shuō)它是非標(biāo)準(zhǔn)的, 被個(gè)別公司壟斷的技術(shù), 不能像 EJB 那樣可以換一家廠商的服務(wù)器, Spring 不存在第二家公司來(lái)做.

          另外開(kāi)發(fā)工具的支持上, MyEclipse 5 可以快速的 5 分鐘就做好 Spring 整合 Hibernate 的框架代碼. 如果大家有興趣可以自己找點(diǎn)資料來(lái)看或者直接咨詢(xún)我.

          那么大家看了這篇文檔希望能有一些自己的想法, 把內(nèi)容 100% 掌握是不現(xiàn)實(shí)的, 而且過(guò)了一陣子不用就肯定會(huì)忘, 所以現(xiàn)在需要的是了解概念, 能跑一些基礎(chǔ)的代碼以后用到的話(huà)再深入研究.

          posted on 2007-08-13 13:18 冬天出走的豬 閱讀(243) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): spring
          主站蜘蛛池模板: 博客| 上高县| 蒙山县| 海淀区| 怀来县| 卓尼县| 漯河市| 丹寨县| 房产| 元江| 东乌珠穆沁旗| 宝清县| 隆安县| 东乡| 娄烦县| 九江县| 兰西县| 上林县| 烟台市| 东台市| 永兴县| 吉首市| 滨海县| 灵寿县| 库尔勒市| 永川市| 马边| 班玛县| 江永县| 尚志市| 思南县| 文成县| 绥江县| 永清县| 雷州市| 密云县| 伊金霍洛旗| 满洲里市| 修武县| 绵阳市| 腾冲县|