Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          Spring中IOC的實現 (轉)


                        了解了IOC模式的思想以及其優點,再來學習其實現。上篇blog中大致描述了PicoContainer以及Spring各自對IOC的實現,這篇來詳細看一下Spring中它的實現。

          SpringIOC貫穿了其整個框架,但正如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 IOCSetter Injection)以及Type3 IOCConstructor Injection)。

               SpringIOC的實現的核心是其Core Bean Factory,它將框架內部的組件以一定的耦合度組裝起來,并對使用它的應用提供一種面向服務的編程模式(SOPService-Orient Programming),比如Spring中的AOP、以及持久化(Hibernate、ibatics)的實現。
              首先從最底層最基礎的factory Bean開始,先來看org.springframework.beans.factory.Bean

          Factory接口,它是一個非常簡單的接口,getBean方法是其中最重要的方法,Spring通常是使用xmlpopulate 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();

                 }

          }


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

          posted on 2006-02-24 20:53 都市淘沙者 閱讀(1808) 評論(0)  編輯  收藏 所屬分類: Spring+Struts+Hibernate

          主站蜘蛛池模板: 黄浦区| 和龙市| 禄劝| 嘉黎县| 连南| 驻马店市| 横峰县| 尼勒克县| 普陀区| 河源市| 永年县| 长泰县| 山阳县| 麦盖提县| 樟树市| 安徽省| 上饶市| 平山县| 旅游| 合水县| 舟曲县| 琼海市| 株洲市| 大田县| 峡江县| 鲜城| 泾阳县| 临邑县| 台东县| 浦县| 巨野县| 叶城县| 阜阳市| 贵德县| 柏乡县| 绥宁县| 桃江县| 彰武县| 汨罗市| 茶陵县| 德阳市|