Spring 依赖注入的理解

首先:

  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 }
原文地址:https://www.cnblogs.com/lonecloud/p/5930122.html