Java代碼實現依賴注入

來源:互聯網
上載者:User

這裡將模仿Spring實現一種基於xml設定檔的依賴注入機制。檔案中將實現3中注入,一是單值注入 ,包括int,float,double,char等,也包括String注入;二是Java容器注入,包括List,Set,Map三種 容器的注入,最後一種是java bean對象注入。

實現的機制是,使用Dom4j對xml設定檔進行解析,這裡使用dom4j的Element Handler機制,一種類 似與責任鏈模式的實現機制;對於java對象的構建使用反射機制,這裡主要是針對得到的類的Field進行 set賦值。我試圖通過調用Method的invoke方法調用類本身的setter方法,但是由於通過xml解析得到的值 都是String,如果將這些String動態轉換為相應的確定類型是個痛點,Method的invoke方法,如果形參 是int,而傳入java.lang.Integer,它不會認,所以嘗試失敗,只能通過Field的set方法傳入特定值。

設定檔setting.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans>
   <bean id="me" class="com.zj.ioc.di.imp.Person">
    <property name="name">
      <value>ZJ</value>
    </property>
    <property name="age">
      <value>26</value>
    </property>
    <property name="height">
      <value>1.78</value>
    </property>
   </bean>
   <bean id="you" class="com.zj.ioc.di.imp.Person">
    <property name="name">
      <value>Mary</value>
    </property>
    <property name="age">
      <value>27</value>
    </property>
    <property name="height">
      <value>1.66</value>
    </property>
   </bean>
   <bean id="myList" class="com.zj.ioc.di.imp.ListOne">
    <property name="msg">
      <list>
        <value>java</value>
        <value>c</value>
        <value>windows</value>
      </list>
    </property>
   </bean>
   <bean id="mySet" class="com.zj.ioc.di.imp.SetOne">
    <property name="msg">
      <set>
        <value>tom</value>
        <value>cat</value>
        <value>dog</value>
      </set>
    </property>
   </bean>
   <bean id="myMap" class="com.zj.ioc.di.imp.MapOne">
    <property name="msg">
      <map>
        <entry key="c">
          <value>CHINA</value>
        </entry>
        <entry key="j">
          <value>JAPAN</value>
        </entry>
        <entry key="k">
          <value>KOREA</value>
        </entry>
      </map>
    </property>
   </bean>
   <bean id="us" class="com.zj.ioc.di.imp.Persons">
    <property name="i">
      <ref bean="me" />
    </property>
    <property name="u">
      <ref bean="you" />
    </property>
   </bean>
</beans>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.