<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海鷗航際

    JAVA站
    posts - 11, comments - 53, trackbacks - 1, articles - 102

    Spring中IOC的實現

    Posted on 2005-01-14 20:30 海天一鷗 閱讀(618) 評論(0)  編輯  收藏 所屬分類: J2EE

     

    public class RefBean {
           
    public String getAddress() {
                  
    return address;
           }

           
    public void setAddress(String address) {
                  
    this.address = address;
           }

           
    public String getZipcode() {
                  
    return zipcode;
           }

           
    public void setZipcode(String zipcode) {
                  
    this.zipcode = zipcode;
           }

           
    private String zipcode=null;
           
    private String address=null;
    }

    Spring中IOC貫穿了其整個框架,但正如martinflower所說:“saying that these lightweight containers are special because they use inversion of control is like saying my car is special because it has wheels”,IOC已經稱為框架設計中必不可少的部分。就實現上來講Spring采取了配置文件的形式來實現依賴的注射,并且支持Type2 IOC(Setter Injection)以及Type3 IOC(Constructor Injection)。

        Spring中IOC的實現的核心是其Core Bean Factory,它將框架內部的組件以一定的耦合度組裝起來,并對使用它的應用提供一種面向服務的編程模式(SOP:Service-Orient Programming),比如Spring中的AOP、以及持久化(Hibernate、ibatics)的實現。

        首先從最底層最基礎的factory Bean開始,先來看org.springframework.beans.factory.Bean

        Factory接口,它是一個非常簡單的接口,getBean方法是其中最重要的方法,Spring通常是使用xml來populate Bean,所以比較常用的是XMLFactoryBean。

        用一個簡單的示例看一下其用法。首先寫下兩個Bean類:

        ExampleBean 類:

    public class ExampleBean {
           
    private String psnName=null;
           
    private RefBean refbean=null;
           
    private String addinfo=null;
           
    public String getAddinfo() {
                  
    return getRefbean().getAddress()+getRefbean().getZipcode();
           }

           
    public String getPsnName() {
                  
    return psnName;
           }

           
    public void setPsnName(String psnName) {
                  
    this.psnName = psnName;
           }

           
    public void setRefbean(RefBean refbean) {
                  
    this.refbean = refbean;
           }

          
    public RefBean getRefbean() {
                  
    return refbean;
           }

           
    public void setAddinfo(String addinfo) {
                  
    this.addinfo = addinfo;
           }

    }

     

     RefBean類:

     

    public class RefBean {
           
    public String getAddress() {
                  
    return address;
           }

           
    public void setAddress(String address) {
                  
    this.address = address;
           }

           
    public String getZipcode() {
                  
    return zipcode;
           }

           
    public void setZipcode(String zipcode) {
                  
    this.zipcode = zipcode;
           }

           
    private String zipcode=null;
           
    private String address=null;
    }
    其xml配置文件 Bean.xml

     

     

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd"
    >
    <beans>
      
    <bean id="exampleBean" class="test.ExampleBean">
        
    <property name="psnName"><value>xkf</value></property>
        
    <property name="refbean">
           
    <ref bean="refBean"/>
        
    </property>
      
    </bean>
      
    <bean id="refBean" class="test.RefBean">
      
    <property name="address"><value>BeiJing</value></property>
      
    <property name="zipcode"><value>100085</value></property>
      
    </bean>
    </beans>

    然后可以寫個測試類來測試,當然,需要Spring中的Spring-core.jar以及commons-logging.jar,當然在elipse中可以通過安裝spring-ide插件來輕松實現。

    public class Test {
           
    public static void main(String[] args){
                  
    try{
                  Resource input 
    = new ClassPathResource("test/Bean.xml");
                  System.
    out.println("resource is:"+input);
                  BeanFactory factory 
    = new XmlBeanFactory(input);
                  ExampleBean eb 
    =
                  (ExampleBean)factory.getBean(
    "exampleBean");
                  System.
    out.println(eb.getPsnName());
                  System.
    out.println(eb.getAddinfo());
           }

           
    catch(Exception e){
                  e.printStackTrace();
           }

    }
    這樣,通過BeanFactory的getBean方法,以及xml配置文件,避免了在test類中直接實例化ExampleBean,消除了應用程序(Test)與服務(ExampleBean)之間的耦合,實現了IOC(控制反轉)或者說實現了依賴的注射(Dependency Injection)。

     

     

    主站蜘蛛池模板: 两个人看www免费视频| 男人天堂免费视频| 无码人妻AV免费一区二区三区 | 亚洲看片无码在线视频| 蜜桃传媒一区二区亚洲AV| 成在线人直播免费视频| 无码国产精品一区二区免费模式 | 免费人成黄页在线观看日本| 免费看国产精品3a黄的视频| 亚洲AV无码一区二区三区在线观看| 亚洲免费人成在线视频观看| 亚洲冬月枫中文字幕在线看 | 亚洲国产成人久久综合| 午夜免费福利小电影| 亚洲国产成人久久综合碰碰动漫3d| 亚洲精品乱码久久久久蜜桃| 精品久久久久久久免费加勒比| 国产亚洲精品a在线无码| 亚洲人成77777在线播放网站不卡| 精品熟女少妇AV免费观看| 亚洲AV无码专区在线观看成人 | 成年性午夜免费视频网站不卡 | 亚洲最大av资源站无码av网址| 99热在线观看免费| 亚洲一区二区三区在线视频| 亚洲人成色77777在线观看| 最近中文字幕电影大全免费版 | 久久久久亚洲AV无码专区首JN| 精品国产免费人成网站| 日本成人在线免费观看| 亚洲天堂2016| 国产电影午夜成年免费视频| 亚洲s色大片在线观看| 在线免费观看伊人三级电影| 亚洲精品成人网站在线播放| 91福利视频免费观看| 亚洲精华国产精华精华液好用| 亚洲宅男天堂在线观看无病毒| 无码AV动漫精品一区二区免费| 久久久久久亚洲精品| 三年片在线观看免费观看大全一|