美麗涵涵童裝店--說我博客名字,給你們打折!
          隨筆 - 82  文章 - 266  trackbacks - 0
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456


          點擊這里給楊愛友發(fā)消息
          美麗涵涵童裝店
          說我博客名字,給你們打折!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          好友的BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

                                                                      第一章 概論
          1. 關(guān)于輕量重量級的解釋
              夏昕說:現(xiàn)在的輕量級和重量級的確很難區(qū)分了,沒有一個明確的衡量標(biāo)準(zhǔn),之前有人說,有classloader的算是重量級;也有人說,超過3MB的算是重量級,spring core算是輕量級的,但是加上期于的部件,估計就得列入重量記的范疇了。
          林信良說:用了spring并不等于輕量級開發(fā)。重點是您有沒有采納其精神,用了IOC就輕量級了嗎?不見得。什么都來不DI,我看也是很沉重的;如果你在設(shè)計時善用IoC,即使不用spring也是輕量級。不要為了spring而spring。
          2. IoC的理解
             Don't call me,I will call you!程序不依賴于實現(xiàn),而是依賴與抽象接口。在設(shè)計業(yè)務(wù)類時,我們設(shè)計為它依賴于某抽象接口,具體的需要哪個實現(xiàn)類是由配置文件來幫我們注入的。這就是面向接口編程的思想,當(dāng)業(yè)務(wù)需求發(fā)生變動時,我們只需修改其實現(xiàn)類的具體實現(xiàn),而接口并沒有改變,所以低層業(yè)務(wù)代碼不做任何改動,既增加了代碼的復(fù)用率,也是功能接口變得清晰。Don't call me,you should call my interface!
          3. DI 依賴注入的理解
              保留抽象接口,讓組件依賴抽象接口,當(dāng)組件要與其他實際的對象發(fā)生依賴關(guān)系時,由抽象接口來注入依賴的實際對象。依賴注入,注入你所依賴的實現(xiàn)類,由spring容器幫你注入適合的實現(xiàn)類,而不是你自己去創(chuàng)建bean實例。有3種基本實現(xiàn)方式:Interface injection、Setter injection與Constructor injection。
          4. 應(yīng)用程序中獲取bean

          1     <bean id="helloBean" class="chapter2.HelloBean">
          2         <property name="helloWord">
          3             <value>Hello yangay!</value>
          4         </property>
          5     </bean>

              public static void main(String[] args) {
                  Resource rs 
          = new ClassPathResource("applicationContext.xml");//從classpath下加載配置信息
                  BeanFactory factory = new XmlBeanFactory(rs);//基于xml格式配置文件的實例化方式,得到一個BeanFactory
                  HelloBean hello = (HelloBean)factory.getBean("helloBean");//獲取id="helloBean"的bean,此時可以調(diào)用bean里定義的所有方法
                  System.out.println(hello.getHelloWord());
              }
             
              這是通過beanFactory管理Bean的方式,BeanFactory負(fù)責(zé)讀取Bean定義文件;管理對象的加載、生成;維護(hù)Bean對象之間的依賴關(guān)系;負(fù)責(zé)Bean的生命周期,對于簡單的應(yīng)用程序來說,使用BeanFactory就已經(jīng)足夠來管理Bean了。BeanFactory接口提供了六個方法管理Bean。
          另外還可以通過ApplicationContext來獲取Bean對象:

          1 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//從classpath下加載配置信息
          2 HelloBean hello = (HelloBean)ctx.getBean("helloBean");//獲取id="helloBean"的bean,此時可以調(diào)用bean里定義的所有方法

                                      第二章 spring IoC、AOP實例及分析
          1. IoC實例一
              控制反轉(zhuǎn)用得最多的是為業(yè)務(wù)類注入Bean對象,典型的應(yīng)用是在結(jié)合struts開發(fā)是,為struts的action類來注入springDao,這樣在業(yè)務(wù)層如action類中不再介入spring API,但同時又可以利用spring提供的所有便捷功能。低層實現(xiàn)細(xì)節(jié)發(fā)生的變化,對業(yè)務(wù)層來說是透明的,不但降低了程序的偶合性,而且也提高了DAO對象的重用性。在這個例子中,為了簡單起見,我們只為HelloBean注入了一個字符串,而不是注入實體Bean。但這只體現(xiàn)出了控制反轉(zhuǎn)的特點,對于依賴注入DI并沒有得到明顯的體現(xiàn)。
          1)首先編寫一個簡單的JAVABEAN
          1 public class HelloBean {
          2     private String helloWord;

          3     public String getHelloWord() {
          4         return helloWord;
          5     }
          6     public void setHelloWord(String helloWord) {
          7         this.helloWord = helloWord;
          8     }
          9 }
          2)接下來編寫 Bean定義文件,定義文件告訴spring如何完成以來關(guān)系的注入等動作。我們這里命名文件為applicationContext.xml,定義文件中省略了xml文件的頭
          1     <bean id="helloBean" class="chapter2.HelloBean">//應(yīng)用程序中用于取得bean的標(biāo)志
          2         <property name="helloWord">//設(shè)置了bean中setter的名稱
          3             <value>Hello yangay!</value>//設(shè)置了將要注入的值
          4         </property>
          5     </bean>

          3)最后編寫一個簡單的示范程序
          1 public class SpringDemo {
          2 
          3     public static void main(String[] args) {
          4         ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
          5         HelloBean hello = (HelloBean)ctx.getBean("helloBean");//獲取id="helloBean"的bean,此時可以調(diào)用bean里定義的所有方法
          6         System.out.println(hello.getHelloWord());
          7     }
          8 }
          運行之,將會看到在bean定義文件中為"helloWord"設(shè)置的值"Hello yangay!"被打印出來。
          --------------------
          2. 1. IoC實例二
              其實spring IoC的初衷就是降低程序的偶合性,使開發(fā)者面向接口編程,使業(yè)務(wù)層設(shè)計不以來于實現(xiàn),具體依賴與哪個bean是在speing培植文件中來定義的。同樣在這里寫一個示范程序,包括一個接口,兩個實現(xiàn)類,一與業(yè)務(wù)有關(guān)的Business類,Business類依賴的是接口,而不是接口的實現(xiàn),具體需要哪個實現(xiàn)是由spring容器來實現(xiàn)注入的。
          1)接口
          只聲明了一個保存的方法
          1 public interface IDeviceWriter {
          2     void svaeToDevice();
          3 }
          2)第一個實現(xiàn)IDeviceWriter接口的類,存儲到軟盤
          1 public class FloppyWriter implements IDeviceWriter{
          2 
          3     public void svaeToDevice() {
          4         System.out.println("存儲至軟盤");
          5     }
          6 }
          3)第二個實現(xiàn)IDeviceWriter接口的類,存儲到硬盤
          1 
          2 public class DiskWriter implements IDeviceWriter{
          3 
          4     public void svaeToDevice() {
          5         System.out.println("存儲至硬盤");
          6     }
          7 }

          4)業(yè)務(wù)類,依賴于抽象的IDviceWriter接口,要 存儲到磁盤還是軟盤是由spring配置文件來決定的
           1 public class Business {
           2 
           3     private IDeviceWriter writer;
           4     public void save(){
           5         writer.svaeToDevice();
           6     }
           7 
           8     public IDeviceWriter getWriter() {
           9         return writer;
          10     }
          11     public void setWriter(IDeviceWriter writer) {
          12         this.writer = writer;
          13     }
          14 }
          5)bean的定義文件
          1     <bean id="floppyWriter" class="chapter2.FloppyWriter"/>
          2     <bean id="diskWriter" class="chapter2.FloppyWriter"/>
          3     <bean id="business" class="chapter2.Business">
          4         <property name="writer">
          5             <ref bean="floppyWriter"/>
          6         </property>
          7     </bean>
              將id為writer的bean注入到business Bean中,在Business對象中可以調(diào)用FloppyWriter的所有方法,實現(xiàn)了將數(shù)據(jù)保存至軟盤的功能。

          6)測試類
          1 public class SpringDemo2 {
          2 
          3     public static void main(String[] args) {
          4         Resource rs = new ClassPathResource("applicationContext.xml");
          5         BeanFactory factory = new XmlBeanFactory(rs);
          6         Business business = (Business) factory.getBean("business");
          7         business.save();
          8     }
          9 }

              現(xiàn)在如果我們想要把數(shù)據(jù)保存到硬盤,而不是軟盤了,我們只需要修改bean的配置文件,讓業(yè)務(wù)類Business依賴于diskWriter既可,Business不做任何的修改。這也是面向接口編程的好處所在。



          posted on 2007-09-04 00:22 楊愛友 閱讀(1392) 評論(6)  編輯  收藏 所屬分類: java相關(guān)技術(shù)

          FeedBack:
          # re: spring2.0使用手冊學(xué)習(xí)筆記(一) 2007-09-04 17:25 千山鳥飛絕
          我怎么沒看得出2.0的東西來,這些只是spring一直以來就有的東東。
          建議Lz取標(biāo)題實在一點。  回復(fù)  更多評論
            
          # re: spring2.0使用手冊學(xué)習(xí)筆記(一) 2007-09-04 17:37 楊愛友
          @千山鳥飛絕
          也許吧,我本意也不是只記錄2.0的新東西。我對spring了解不多,不過這些確實是我看過spring2.0后寫的,當(dāng)然應(yīng)該大部分內(nèi)容還是1.0就有的吧。  回復(fù)  更多評論
            
          # re: spring2.0使用手冊學(xué)習(xí)筆記(一) 2007-09-04 20:44 BeanSoft
          呵呵, 2.0 加了不少的垃圾功能, 一下子變得不輕量了. 就跟 Struts 一樣, 最核心的東西出現(xiàn)在 1.0 之前, 之后的好多就有點雞肋了.  回復(fù)  更多評論
            
          # re: spring2.0使用手冊學(xué)習(xí)筆記(一) 2007-09-05 13:37 Lingo
          比如呢?哪些垃圾功能?  回復(fù)  更多評論
            
          # re: spring2.0使用手冊學(xué)習(xí)筆記(一) 2007-09-06 09:09 hello
          寫得很不錯,支持,希望你不斷進(jìn)步!!  回復(fù)  更多評論
            
          # re: spring2.0使用手冊學(xué)習(xí)筆記(一) 2007-09-06 12:49 楊愛友
          @hello
          謝謝,一定,我會的。再引用下朋友的話,“只要你保持學(xué)習(xí)的熱情與動力,把握好方向,必然會取得長足的進(jìn)步”,貴在堅持!
          should you know me ?
            回復(fù)  更多評論
            
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 瑞丽市| 横山县| 靖宇县| 崇仁县| 逊克县| 综艺| 岳西县| 龙海市| 博罗县| 平乡县| 香河县| 于田县| 平果县| 夏邑县| 七台河市| 西藏| 大足县| 宁安市| 且末县| 乳山市| 离岛区| 确山县| 都兰县| 无为县| 彝良县| 九台市| 鱼台县| 独山县| 山东| 应用必备| 平湖市| 濮阳市| 雅江县| 永靖县| 沾益县| 巫溪县| 蒙城县| 保定市| 沁水县| 兴义市| 从化市|