首先:

  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. 2.supervisor实时监控程序存活状态

    1.supervisor是一款python开发的一个client/server服务,是一款进程管理工具,支持linux/unix系统,但是不支持windows系统. 它可以很方便的监听.启动.停止.重 ...

  2. 使用SQL 提示优化sql

    use index 在查询语句中表名的后面,添加use index来提供希望mysql去参考的索引列表,就可以让mysql不再考虑其他可用的索引 explain select * from renta ...

  3. javabean内省

    何为JavaBean? JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共 ...

  4. java常用类--正则表达式

    正则表达式到底是什么? 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过W ...

  5. CRC检验

    CRC(循环冗余检验码) 基本原理:在K位信息码后面加上R位校验形成N位编码(即CRC码),事先需要约定一个生成多项式G(x),校验码生成过程:将K位信息码向左移动R位然后mol(其实就是按位异或)上 ...

  6. 安卓和IOS兼容问题

    点击穿透 click延迟 scroll元素临界的bug android screen.w/h 不准 rem不准 scroll时动画失效 animate回调 最小字号限制 不同机型全屏自适应 andro ...

  7. C# String StringBuilder 区别

    这篇博客,纯参考.主要为了自己也复习一遍,过一下其中的原理. string aTest = "abc";//分配固定的内存大小 aTest += "ddd"; ...

  8. ado.net 参数传递之 in

    之前项目有一放行的功能,对某界面维护时(数据的增删改),先将数据保存到临时表中,放行后再真正的写入到库中.由于设计到主从表多中约束关系,所以当时我采用的是写一个存储过程来对某个界面的操作进行统一处理, ...

  9. ubuntu下进入root错误解决方法

    1.进入root用户提示su: Authentication failure roots@ubuntu:~$ su - Password: su: Authentication failure 2.通 ...

  10. openstack一键安装脚本(转载)

    #!/bin/sh # openstack pike 单机 一键安装 # 环境 centos 7.4.1708 x86_64 # 更多内容 http://dwz.cn/openstack # Myde ...