spring的依賴注入
阿新 • • 發佈:2019-01-06
依賴注入的英文名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?- publicclass BookDao
- {
- publicvoid save()
- {
- System.out.println("add Book");
- }
- }
[java] view plain copy print?
-
publicclass BookService
- {
- private BookDao bookDao;//所依賴的物件
- publicvoid setBookDao(BookDao bookDao)//用於setter注入
- {
- this.bookDao = bookDao;
- }
- publicvoid addBook()
- {
- bookDao.save();
- }
- }
配置xml,xml的位置可以放到bean所在的目錄i [java] view plain copy print?
-
<?xml version=
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
- <bean id="bookDaoId"class="com.canyugan.di.BookDao"/>
- <bean id="bookServiceId"class="com.canyugan.di.BookService">
- <!-- <property> 進行依賴注入過程,底層將執行setter方法
- * name 物件的屬性, setBookDao -> BookDao -> bookDao
- * ref 其他物件例項引用
- -->
- <!-- has a -->
- <property name="bookDao" ref="bookDaoId"></property>
- </bean>
- </beans>
測試我們的setter注入 [java] view plain copy print?
- @Test
- publicvoid demo1()
- {
- //載入配置檔案
- ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/canyugan/di/beans.xml");
- //從spring的工廠中獲取物件
- BookService bookService=applicationContext.getBean("bookServiceId",BookService.class);
- bookService.addBook();
- }