1. 程式人生 > >spring的依賴注入

spring的依賴注入

依賴注入的英文名Dependency Injection。與ioc差不多,不過是從兩個角度描述同一個概念。舉個栗子,一個物件A需要使用物件B來完成某個功能,可以說A依賴B,spring會在建立A時自動將B物件注入A物件。so,依賴注入的作用就是使用spring框架建立物件時,動態的將所依賴的物件注入到Bean元件中。

說到依賴注入,實現方式有3中,分別是setter方法注入、構造方法注入和介面注入。

屬性setter注入:ioc容器使用setter方法來注入被依賴的物件。通過呼叫無參構造器或者無參的static工廠方法例項化Bea後,呼叫Bean的setter方法,實現基於setter的依賴注入。

構造方法注入:使用構造方法來注入所依賴的例項。

介面注入:spring容器不支援介面注入。

今天玩的是setter注入。通過servi層呼叫Dao層來模擬依賴注入。

[java] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. publicclass BookDao   
  2. {  
  3.     publicvoid save()  
  4.     {  
  5.         System.out.println("add Book");  
  6.     }  
  7. }  

[java] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. publicclass BookService   
  2. {  
  3.     private BookDao bookDao;//所依賴的物件
  4.     publicvoid setBookDao(BookDao bookDao)//用於setter注入
  5.     {  
  6.         this.bookDao = bookDao;  
  7.     }  
  8.     publicvoid addBook()  
  9.     {  
  10.         bookDao.save();  
  11.     }  
  12. }  

配置xml,xml的位置可以放到bean所在的目錄i [java] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. <?xml version=
    "1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.                            http://www.springframework.org/schema/beans/spring-beans.xsd">
  6.     <bean id="bookDaoId"class="com.canyugan.di.BookDao"/>  
  7.     <bean id="bookServiceId"class="com.canyugan.di.BookService">  
  8.         <!-- <property> 進行依賴注入過程,底層將執行setter方法  
  9.             * name 物件的屬性, setBookDao -> BookDao -> bookDao  
  10.             * ref 其他物件例項引用  
  11.          -->  
  12.          <!-- has a -->  
  13.         <property name="bookDao" ref="bookDaoId"></property>  
  14.     </bean>  
  15. </beans>  

測試我們的setter注入 [java] view plain copy  print?在CODE上檢視程式碼片派生到我的程式碼片
  1. @Test
  2.     publicvoid demo1()  
  3.     {   
  4.         //載入配置檔案
  5.         ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/canyugan/di/beans.xml");  
  6.         //從spring的工廠中獲取物件
  7.         BookService bookService=applicationContext.getBean("bookServiceId",BookService.class);  
  8.         bookService.addBook();  
  9.     }