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


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

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章檔案

          好友的BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

                                                                      第一章 概論
          1. 關于輕量重量級的解釋
              夏昕說:現在的輕量級和重量級的確很難區分了,沒有一個明確的衡量標準,之前有人說,有classloader的算是重量級;也有人說,超過3MB的算是重量級,spring core算是輕量級的,但是加上期于的部件,估計就得列入重量記的范疇了。
          林信良說:用了spring并不等于輕量級開發。重點是您有沒有采納其精神,用了IOC就輕量級了嗎?不見得。什么都來不DI,我看也是很沉重的;如果你在設計時善用IoC,即使不用spring也是輕量級。不要為了spring而spring。
          2. IoC的理解
             Don't call me,I will call you!程序不依賴于實現,而是依賴與抽象接口。在設計業務類時,我們設計為它依賴于某抽象接口,具體的需要哪個實現類是由配置文件來幫我們注入的。這就是面向接口編程的思想,當業務需求發生變動時,我們只需修改其實現類的具體實現,而接口并沒有改變,所以低層業務代碼不做任何改動,既增加了代碼的復用率,也是功能接口變得清晰。Don't call me,you should call my interface!
          3. DI 依賴注入的理解
              保留抽象接口,讓組件依賴抽象接口,當組件要與其他實際的對象發生依賴關系時,由抽象接口來注入依賴的實際對象。依賴注入,注入你所依賴的實現類,由spring容器幫你注入適合的實現類,而不是你自己去創建bean實例。有3種基本實現方式:Interface injection、Setter injection與Constructor injection。
          4. 應用程序中獲取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,此時可以調用bean里定義的所有方法
                  System.out.println(hello.getHelloWord());
              }
             
              這是通過beanFactory管理Bean的方式,BeanFactory負責讀取Bean定義文件;管理對象的加載、生成;維護Bean對象之間的依賴關系;負責Bean的生命周期,對于簡單的應用程序來說,使用BeanFactory就已經足夠來管理Bean了。BeanFactory接口提供了六個方法管理Bean。
          另外還可以通過ApplicationContext來獲取Bean對象:

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

                                      第二章 spring IoC、AOP實例及分析
          1. IoC實例一
              控制反轉用得最多的是為業務類注入Bean對象,典型的應用是在結合struts開發是,為struts的action類來注入springDao,這樣在業務層如action類中不再介入spring API,但同時又可以利用spring提供的所有便捷功能。低層實現細節發生的變化,對業務層來說是透明的,不但降低了程序的偶合性,而且也提高了DAO對象的重用性。在這個例子中,為了簡單起見,我們只為HelloBean注入了一個字符串,而不是注入實體Bean。但這只體現出了控制反轉的特點,對于依賴注入DI并沒有得到明顯的體現。
          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如何完成以來關系的注入等動作。我們這里命名文件為applicationContext.xml,定義文件中省略了xml文件的頭
          1     <bean id="helloBean" class="chapter2.HelloBean">//應用程序中用于取得bean的標志
          2         <property name="helloWord">//設置了bean中setter的名稱
          3             <value>Hello yangay!</value>//設置了將要注入的值
          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,此時可以調用bean里定義的所有方法
          6         System.out.println(hello.getHelloWord());
          7     }
          8 }
          運行之,將會看到在bean定義文件中為"helloWord"設置的值"Hello yangay!"被打印出來。
          --------------------
          2. 1. IoC實例二
              其實spring IoC的初衷就是降低程序的偶合性,使開發者面向接口編程,使業務層設計不以來于實現,具體依賴與哪個bean是在speing培植文件中來定義的。同樣在這里寫一個示范程序,包括一個接口,兩個實現類,一與業務有關的Business類,Business類依賴的是接口,而不是接口的實現,具體需要哪個實現是由spring容器來實現注入的。
          1)接口
          只聲明了一個保存的方法
          1 public interface IDeviceWriter {
          2     void svaeToDevice();
          3 }
          2)第一個實現IDeviceWriter接口的類,存儲到軟盤
          1 public class FloppyWriter implements IDeviceWriter{
          2 
          3     public void svaeToDevice() {
          4         System.out.println("存儲至軟盤");
          5     }
          6 }
          3)第二個實現IDeviceWriter接口的類,存儲到硬盤
          1 
          2 public class DiskWriter implements IDeviceWriter{
          3 
          4     public void svaeToDevice() {
          5         System.out.println("存儲至硬盤");
          6     }
          7 }

          4)業務類,依賴于抽象的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對象中可以調用FloppyWriter的所有方法,實現了將數據保存至軟盤的功能。

          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 }

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



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

          FeedBack:
          # re: spring2.0使用手冊學習筆記(一) 2007-09-04 17:25 千山鳥飛絕
          我怎么沒看得出2.0的東西來,這些只是spring一直以來就有的東東。
          建議Lz取標題實在一點。  回復  更多評論
            
          # re: spring2.0使用手冊學習筆記(一) 2007-09-04 17:37 楊愛友
          @千山鳥飛絕
          也許吧,我本意也不是只記錄2.0的新東西。我對spring了解不多,不過這些確實是我看過spring2.0后寫的,當然應該大部分內容還是1.0就有的吧。  回復  更多評論
            
          # re: spring2.0使用手冊學習筆記(一) 2007-09-04 20:44 BeanSoft
          呵呵, 2.0 加了不少的垃圾功能, 一下子變得不輕量了. 就跟 Struts 一樣, 最核心的東西出現在 1.0 之前, 之后的好多就有點雞肋了.  回復  更多評論
            
          # re: spring2.0使用手冊學習筆記(一) 2007-09-05 13:37 Lingo
          比如呢?哪些垃圾功能?  回復  更多評論
            
          # re: spring2.0使用手冊學習筆記(一) 2007-09-06 09:09 hello
          寫得很不錯,支持,希望你不斷進步!!  回復  更多評論
            
          # re: spring2.0使用手冊學習筆記(一) 2007-09-06 12:49 楊愛友
          @hello
          謝謝,一定,我會的。再引用下朋友的話,“只要你保持學習的熱情與動力,把握好方向,必然會取得長足的進步”,貴在堅持!
          should you know me ?
            回復  更多評論
            
          美麗涵涵童裝店
          親,說我博客名字,給你們打折!
          主站蜘蛛池模板: 望江县| 乌拉特中旗| 溧水县| 大港区| 且末县| 新津县| 陕西省| 邯郸市| 介休市| 秀山| 吉隆县| 宣威市| 万载县| 朝阳市| 广南县| 台前县| 通辽市| 沙河市| 波密县| 通化县| 巫溪县| 呼和浩特市| 新闻| 扎赉特旗| 凤山市| 西丰县| 光泽县| 昆明市| 银川市| 泗洪县| 景洪市| 宽甸| 大港区| 东乌珠穆沁旗| 道孚县| 格尔木市| 武功县| 禹州市| 吉林市| 江城| 道孚县|