spring2.5的第一個簡單應用的學習

weixin_33941350發表於2011-07-16

Spring 是一個開源的控制反轉(Inversion of Control,IoC) 和麵向切面(AOP)的容器框架,

容器提供的宣告式事物


例項化Spring容器常用的兩種方式:
方法一:
在類路徑下尋找配置檔案來例項化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});//陣列是因為可以指定多個配置檔案可根據不同模組配置


方法二:
在檔案系統路徑下尋找配置檔案來例項化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String []{"d:\\beans.xml"})

所謂控制反轉就是應用本身不負責依賴物件的建立及維護,依賴物件的建立及維護又外部容器建立,這樣控制權就有應用轉移到了外部容器,控制權的轉移就是反轉
如何把物件交個spring容器管理

建立一個業務Bean

import cn.itcast.service.impl;


public class PersonServiceBean {
         public  void Save(){
             System.out.printl("我是Save");
     }   //要實現軟體的解耦 實現介面
}

簡單學習一下如何建立介面 抽取介面
右擊-->Refactor-->Extract Interface-->輸入介面的名稱-->對方法打鉤-->點選OK
如此上面的業務Bean類就變成

import cn.itcast.service.impl;


public class PersonServiceBean implements PersonService{
         public  void Save(){
             System.out.printl("我是Save");
     }   //要實現軟體的解耦 實現介面
}


/***這是介面***/

package cn.itcast.service.impl;


public interface PersonService {
 
       public void save();
}


在beans.xml檔案中做配置
模板可以去拷貝

<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">  id屬性是為bean起名稱 並且是唯一 通過ID獲取到這個Bean不可以使用特殊字元如:"/ss"  name屬性同樣是為Bean起名 可以使用特殊字元"/"

</bean> 顧名思義 class指定的就是我們要交個Spring管理Bean類 Bean配置好後這個時候Bean類就會由Spring幫我們建立和維護
編寫spring配置檔案時,不能出現幫助資訊

由於spring的schema檔案位於網路上,如果機器不能連線到網路,那麼在編寫
配置資訊時候就無法出現提示資訊,解決方法有兩種:

1.讓機器上網,eclipse會自動從網路上下載schema檔案並快取在硬碟上
2.手動新增schema檔案,方法如下:
windown->preferences->myeclipse->files and editors->xml->xmlcatalog點"add",
在出現的視窗中的Key Type中選擇URL,
在location中選“File System”,
然後再spring解壓目錄的dist/resources目錄中選擇spring-beans-2.5.xsd,回到設定視窗的時候不要急著關閉視窗,
應把視窗中的Key TYpe改為Schema location, Key改為http://www.springframework.org/schema/beans/spring-beans-2.5.xsd


ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService personService=(PersonService)ctx.getBean("personService");//用這個方法從容器中獲取剛才我們交個Spring的容器
/***當獲取到Bean的名稱時我們可以通過Bean的介面對它進行引用***/
這樣就可以呼叫業務類的方法
personService.save();

總結: 在beans.xml檔案中我們指定的業務Bean類也就是實現

例項化容器後直接從容器中取得這個Bean然後再呼叫業務Bean的方法Save();

/**********************/
迴圈所有Bean物件
for(String beanName : sigletons.keySet())
{
          //獲取Bean物件、
          判斷是否存在
          存在獲取屬性
          for()迴圈屬性描述
          取得setter方法 properdesc.getWriteMethod();
          seeter方法是否存在註解  採用反射技術判斷是否存在註解、
          存在的話
          判斷是否有屬性名取得resource註解
          如果指定了該屬性的name值
          取得Bean物件 根據註解的name屬性把Bean從spring容器中取出來 把引用物件注入到屬性
          如果沒有為註解的name屬性賦值
          那麼就取得屬性的名稱
          for迴圈所有實體然後
          判斷屬性的型別和Bean是否相匹配
          使用方法isAssignableFrom()
          取得Bean的Class
          //把引用物件注入到屬性
}
/**********************/

相關文章