首先:

  1.依赖注入就是一种在一个需要使用它的类中定义一个接口,该类中不管这个接口是怎么实现的,只是执行这个方法

  2.依赖注入可以让该类实现通用

代码:

1.定义一个饮料接口

 package cn.lonecloud.model;
/**
* 创建一个食物接口
* @Title: IDrink.java
* @Package cn.lonecloud
* @Description:
* @author lonecloud
* @date 2016年10月4日 上午9:39:31
*/
public interface IDrink {
public void drink();
}

2.书写它的实现类

 package cn.lonecloud.model;

 /**
* 牛奶
* @Title: milk.java
* @Package cn.lonecloud
* @Description:
* @author lonecloud
* @date 2016年10月4日 上午9:42:17
*/
public class Milk implements IDrink { @Override
public void drink() {
// TODO Auto-generated method stub
System.out.println("喝牛奶");
} }
 package cn.lonecloud.model;

 public class Water implements IDrink {

     @Override
public void drink() {
// TODO Auto-generated method stub
System.out.println("喝水");
} }
 package cn.lonecloud.model;

 public class Coffee implements IDrink {

     @Override
public void drink() {
// TODO Auto-generated method stub
System.out.println("喝的是咖啡");
} }

这三个实现类是对这个饮料接口的实现

3.书写顾客类

 package cn.lonecloud;

 import cn.lonecloud.model.IDrink;

 /**
* 顾客类
* @Title: Customer.java
* @Package cn.lonecloud
* @Description:
* @author loneloud
* @date 2016年10月4日 上午9:47:32
*/
public class Customer {
/**
* 使用这个进行将酒依赖注入到顾客的饮料中
* @param myDrink
*/
public Customer(IDrink myDrink) {
// TODO Auto-generated constructor stub
this.myDrink=myDrink;
}
public Customer() {
// TODO Auto-generated constructor stub
}
public void sendDrink(IDrink drink){
this.myDrink=drink;
}
/**
* 顾客选择要喝的饮料
*/
private IDrink myDrink;
/**
* 顾客喝饮料
* @Description:
*/
public void drinking(){
myDrink.drink();
}
}

顾客喝饮料,定义接口然后可以采用定义方法或者构造方法对这个饮料进行实现。

5.测试方法

 package cn.lonecloud;

 import org.junit.Test;

 import cn.lonecloud.model.Coffee;
import cn.lonecloud.model.IDrink; public class CustomerTest { /**
* 使用这种的话可以使得顾客类变成通用
* @Description:
*/
@Test
public void testByConstract(){
IDrink drink=new Coffee();
//这里可以实现对饮料的注入
Customer customer=new Customer(drink);
customer.drinking();
}
/**
* 使用方法体进行注入
* @Description:
*/
@Test
public void testByMethod(){
IDrink drink=new Coffee();
Customer customer=new Customer();
//这里可以实现对饮料的注入
customer.sendDrink(drink);
customer.drinking();
}
}

Spring 依赖注入的理解的更多相关文章

  1. Spring依赖注入(IOC)那些事

    小菜使用Spring有几个月了,但是对于它的内部原理,却是一头雾水,这次借着工作中遇到的一个小问题,来总结一下Spring. Spring依赖注入的思想,就是把对象交由Spring容器管理,使用者只需 ...

  2. Java Web系列:Spring依赖注入基础

    一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...

  3. SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式

           于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...

  4. SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

           在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...

  5. (转)编码剖析Spring依赖注入的原理

    http://blog.csdn.net/yerenyuan_pku/article/details/52834561 Spring的依赖注入 前面我们就已经讲过所谓依赖注入就是指:在运行期,由外部容 ...

  6. spring依赖注入(反转控制)

    SPRING依赖注入机制(反转控制)解析 Spring能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的 Service对象,还是持久层的DAO对象,都可在Spring的 ...

  7. Helloworld之Spring依赖注入/控制反转(DI/IoC)版

    Helloworld之Spring依赖注入/控制反转(DI/IoC)版 作者:雨水, 日期:2014-10-29 摘要:本文主要用于培训刚開始学习的人理解Spring中的依赖注入的基本概念. 先介绍依 ...

  8. 1.4 Spring 依赖注入(DI)和控制反转(IOC)详解

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  Spring 依赖注 ...

  9. Spring依赖注入三种方式详解

    在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...

随机推荐

  1. 03 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之web层

    Github:https://github.com/nnngu 项目源代码:https://github.com/nnngu/nguSeckill 前端交互流程设计 对于一个系统,需要产品经理.前端工 ...

  2. shell实例练习+详解

    想着将Shell与Python和Java等脚本比较比较,当一有这个念头我就放弃了.这太侮辱Shell了.(哭笑脸!) 作为一个程序员,Linux那是最基本要求.而shell脚本有时候也会显示它在Lin ...

  3. gRPC实战

    gRPC是Google开源的一款非常棒的系统间通信工具,完美的communication抽象,构建在protobuf之上的RPC. 下面我们聊聊它的应用场景,grpc为分布式系统而生,可以是系统间通信 ...

  4. python3 第六章 - 条件判断

    Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 条件语句的执行过程,如下图: 条件语句,又称为if语句,它的完整语法如下: if 条件1: 语句块1 ...

  5. Linux 查找命令汇总

    linux下查找命令挺多,本文以列表方式说明which.whereis.locate.find命令的区别: 命令 概述 语法 示例 适用OS 搜索结果 which 在PATH变量指定的路径中,搜索某个 ...

  6. Jmeter_接口自动化基础流程概述

    这里补一篇基础的操作吧,不然总觉得没底! 1:创建一个线程组   2:添加一个cookie管理器   33333 3:设置你的信息头管理器:application/json;text/plain;ch ...

  7. springMVC中@RequestParam和@RequestBody注解的用法

    springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...

  8. 解决ubuntu系统root用户下Chrome无法启动问题

    由于ubuntu16.04系统自带的是Firefox浏览器,需要安装Chrome浏览器,但是在root用户下安装后发现,Chrome无法正常启动.安装及问题解决具体如下: 1. ubuntu上Chro ...

  9. PHP date函数详解

    在页面的最前页加上date_default_timezone_set(PRC);   /*把时间调到北京时间,php5默认为格林威治标准时间*/date ()a:   "am"或是 ...

  10. php与HTML交互问题

    1.将表单中的action属性值设为PHP路径,则网页会跳转到这个网址 <html> <body> <form action="welcome.php" ...