熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Spring 控制反轉(IoC)容器

2013-11-23 20:06:14  來源: Java開源技術 

  (二)個人整理Spring系列控制反轉(IoC)容器

  一什麼是控制反轉模式?  不創建對象但是描述創建它們的方式在代碼中不直接與對象和服務連接但在配置文件中描述哪一個組件需要哪一項服務  容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯系在一起

  二Spring 中的 Bean?  由Spring IoC容器所管理的對象被稱之為beanbean就是由Spring容器初始化裝配及被管理的對象  bean定義以及bean相互間的依賴關系將通過配置元數據來描述   三什麼是Spring IoC容器?  orgspringframeworkbeans包是Spring IoC容器的基礎  orgspringframeworkbeansfactoryBeanFactory接口是Spring IoC容器的實際代表者  IoC容器負責容納此前所描述的bean並對bean進行管理    BeanFactory 接口   BeanFactory是IoC容器的核心接口是工廠設計模式的實現bean 工廠的概念是 Spring 作為 IOC 容器的基礎   它的職責包括實例化檢索配置應用程序中的對象及管理對象之間的關系      BeanFactory 支持兩個對象模型    單態模型提供了具有特定名稱的對象的共享實例可以在查詢時對其進行檢索Singleton 是默認的也是最常用的對象模型對於無狀態服務對象很理想    原型模型確保每次檢索都會創建單獨的對象在每個用戶都需要自己的對象時原型模型最適合    ApplicationContext接口   orgntextApplicationContext由BeanFactory接口派生擴展而來因而提供了BeanFactory所有的功能   在構建JEE應用時使用ApplicationContext將是更好的選擇      context包還提供了以下的功能    MessageSource 提供國際化的消息訪問    資源訪問如URL和文件    事件傳播實現了ApplicationListener接口的bean    載入多個(有繼承關系)上下文

  配置元數據   Spring IoC容器將讀取配置元數據並通過它對應用中各個對象進行實例化配置以及組裝      基於XML的元數據是最常用到的配置元數據格式然而它並不是唯一的描述格式Spring IoC容器在這一點上是完全開放的   當使用基於XML的配置元數據時將在頂層的<beans/>元素中配置一個或多個<bean/>元素      bean定義與應用程序中實際使用的對象一一對應通常情況下bean的定義包括    服務層對象數據訪問層對象(DAO)類似Struts Action的表示層對象Hibernate SessionFactory對象JMS Queue對象等等

  四實例化IoC容器(基於XML的元數據)  通過ClassPathXmlApplicationContext類加載一個或多個XML文檔來實例化BeanFactory接口的實現擴展ApplicationContext類  要從 BeanFactory 檢索 bean只需調用 getBean() 方法傳入將要檢索的 bean 的名稱即可

  五一個簡單Spring 示例

  建立Java項目MySpring

  導入Spring框架

  創建JavaBeanHelloBean編寫testHello方法

  HelloBeanjava

  view plaincopy to clipboardprint?
    <FONT size=>  package comqubean;

  public class HelloBean {

  public String sayHello(String name){

  return Stringformat(%$s : Hello World! name);

  }

  }</FONT>

  package comqubean;

  public class HelloBean {

  public String sayHello(String name){

  return Stringformat(%$s : Hello World! name);

  }

  } 配置applicationContextxml 將HelloBean注入Spring容器

  applicationContextxml

  view plaincopy to clipboardprint?
    <FONT size=>  <?xml version= encoding=UTF?>

  <beans

  xmlns=

  xmlns:xsi=instance

  xsi:schemaLocation= beansxsd>

  <!方法

  <import resource=OtherXML/helloBeanxml/>

  >

  <!方法>

  <bean class=comqubeanHelloBean id=helloBean>

  </bean>

  </beans></FONT>

  <?xml version= encoding=UTF?>

  <beans

  xmlns=

  xmlns:xsi=instance

  xsi:schemaLocation= beansxsd>

  <!方法

  <import resource=OtherXML/helloBeanxml/>

  >

  <!方法>

  <bean class=comqubeanHelloBean id=helloBean>

  </bean>

  </beans>view plaincopy to clipboardprint?
    <FONT size=><STRONG><U>helloBeanxml</U></STRONG></FONT>

  helloBeanxmlview plaincopy to clipboardprint?
    <?xml version= encoding=UTF?>

  <beans

  xmlns=

  xmlns:xsi=instance

  xsi:schemaLocation= beansxsd>

  <bean class=comqubeanHelloBean id=helloBean>

  </bean>

  </beans>

  <?xml version= encoding=UTF?>

  <beans

  xmlns=

  xmlns:xsi=instance

  xsi:schemaLocation= beansxsd>

  <bean class=comqubeanHelloBean id=helloBean>

  </bean>

  </beans>view plaincopy to clipboardprint?
    <FONT size=></FONT>

  導入Junit 測試

  編寫測試類TestHello 重寫setUp方法實例化容器編寫testHello方法測試HelloBean的hello方法

  view plaincopy to clipboardprint?
    <FONT size=>   TestHellojava</FONT>

  TestHellojavaview plaincopy to clipboardprint?
    <FONT size=>

  package comqutest;

  import orgntextApplicationContext;

  import orgntextsupportClassPathXmlApplicationContext;

  import comqubeanHelloBean;

  import junitframeworkTestCase;

  public class TestHello extends TestCase {

  private ApplicationContext ctx;

  private HelloBean hello;

  protected void setUp() throws Exception {

  supersetUp();

  thisctx = new ClassPathXmlApplicationContext(

  new String[] {ApplicationContextxmlOtherXML/helloBeanxml});

  thishello = (HelloBean) thisctxgetBean(helloBean);

  }

  public void testSayHello(){

  assertEquals(Java : Hello World! thishellosayHello(Java));

  }

  }

  </FONT>


From:http://tw.wingwit.com/Article/program/Java/ky/201311/27933.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.