Spring 依賴注入的理解

lonecloud發表於2016-10-04

首先:

  1.依賴注入就是一種在一個需要使用它的類中定義一個介面,該類中不管這個介面是怎麼實現的,只是執行這個方法

  2.依賴注入可以讓該類實現通用

程式碼:

1.定義一個飲料介面

 1 package cn.lonecloud.model;
 2 /**
 3  * 建立一個食物介面
 4  * @Title: IDrink.java
 5  * @Package cn.lonecloud
 6  * @Description: 
 7  * @author lonecloud
 8  * @date 2016年10月4日 上午9:39:31
 9  */
10 public interface IDrink {
11     public  void drink();
12 }

2.書寫它的實現類

 1 package cn.lonecloud.model;
 2 
 3 
 4 /**
 5  * 牛奶
 6  * @Title: milk.java
 7  * @Package cn.lonecloud
 8  * @Description: 
 9  * @author lonecloud
10  * @date 2016年10月4日 上午9:42:17
11  */
12 public class Milk implements IDrink {
13 
14     @Override
15     public void drink() {
16         // TODO Auto-generated method stub
17         System.out.println("喝牛奶");
18     }
19     
20     
21 }
 1 package cn.lonecloud.model;
 2 
 3 
 4 public class Water implements IDrink {
 5 
 6     @Override
 7     public void drink() {
 8         // TODO Auto-generated method stub
 9         System.out.println("喝水");
10     }
11 
12 }
 1 package cn.lonecloud.model;
 2 
 3 public class Coffee implements IDrink {
 4 
 5     @Override
 6     public void drink() {
 7         // TODO Auto-generated method stub
 8         System.out.println("喝的是咖啡");
 9     }
10 
11 }

這三個實現類是對這個飲料介面的實現

3.書寫顧客類

 1 package cn.lonecloud;
 2 
 3 import cn.lonecloud.model.IDrink;
 4 
 5 /**
 6  * 顧客類
 7  * @Title: Customer.java
 8  * @Package cn.lonecloud
 9  * @Description: 
10  * @author loneloud
11  * @date 2016年10月4日 上午9:47:32
12  */
13 public class Customer {
14     /**
15      * 使用這個進行將酒依賴注入到顧客的飲料中
16      * @param myDrink
17      */
18     public Customer(IDrink myDrink) {
19         // TODO Auto-generated constructor stub
20         this.myDrink=myDrink;
21     }
22     public Customer() {
23         // TODO Auto-generated constructor stub
24     }
25     public void sendDrink(IDrink drink){
26         this.myDrink=drink;
27     }
28     /**
29      * 顧客選擇要喝的飲料
30      */
31     private IDrink myDrink;
32     /**
33      * 顧客喝飲料
34      * @Description:
35      */
36     public void drinking(){
37         myDrink.drink();
38     }
39 }

顧客喝飲料,定義介面然後可以採用定義方法或者構造方法對這個飲料進行實現。

5.測試方法

 1 package cn.lonecloud;
 2 
 3 import org.junit.Test;
 4 
 5 import cn.lonecloud.model.Coffee;
 6 import cn.lonecloud.model.IDrink;
 7 
 8 public class CustomerTest {
 9     
10     /**
11      * 使用這種的話可以使得顧客類變成通用
12      * @Description:
13      */
14     @Test
15     public void testByConstract(){
16         IDrink drink=new Coffee();
17         //這裡可以實現對飲料的注入
18         Customer customer=new Customer(drink);
19         customer.drinking();
20     }
21     /**
22      * 使用方法體進行注入
23      * @Description:
24      */
25     @Test
26     public void testByMethod(){
27         IDrink drink=new Coffee();
28         Customer customer=new Customer();
29         //這裡可以實現對飲料的注入
30         customer.sendDrink(drink);
31         customer.drinking();
32     }
33 }

 

相關文章