一:DI Dependency Injection ,依赖注入

is a :是一个,继承。

has a:有一个,成员变量,依赖。

class B {

private A a;   //B类依赖A类

}

依赖:一个对象需要使用另一个对象

注入:通过setter方法进行另一个对象实例设置。

l 例如:

class BookServiceImpl{

//之前开发:接口 = 实现类  (service和dao耦合)

//private BookDao bookDao = new BookDaoImpl();

//spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)

private BookDao bookDao;

setter方法

}

模拟spring执行过程

创建service实例:BookService bookService = new BookServiceImpl() -->IoC  <bean>

创建dao实例:BookDao bookDao = new BookDaoImple() -->IoC

将dao设置给service:bookService.setBookDao(bookDao); -->DI   <property>

1.目标类

  1. BookDao.java
  1. package com.jd.di;
  2.  
  3. /**
  4. * @author weihu
  5. * @date 2018/8/8/008 23:44
  6. * @desc
  7. */
  8. public interface BookDao {
  9. void save();
  10. }
  1. BookService.java
  1. package com.jd.di;
  2.  
  3. /**
  4. * @author weihu
  5. * @date 2018/8/8/008 23:46
  6. * @desc BookService依赖BookDao
  7. */
  8. public interface BookService {
  9. void addBook();
  10. }
  1. BookDaoImpl.java
  1. package com.jd.di.impl;
  2.  
  3. import com.jd.di.BookDao;
  4.  
  5. /**
  6. * @author weihu
  7. * @date 2018/8/8/008 23:45
  8. * @desc
  9. */
  10. public class BookDaoImpl implements BookDao {
  11. @Override
  12. public void save() {
  13. System.out.println("di save book!");
  14. }
  15. }
  1. BookServiceImpl.java
  1. package com.jd.di.impl;
  2.  
  3. import com.jd.di.BookDao;
  4. import com.jd.di.BookService;
  5.  
  6. /**
  7. * @author weihu
  8. * @date 2018/8/8/008 23:48
  9. * @desc
  10. */
  11. public class BookServiceImpl implements BookService {
  12.  
  13. //方式1:之前,接口=实现类
  14. // private BookDao bookDao = new BookDaoImpl();
  15. //方式二:接口+setter
  16. private BookDao bookDao;//has a 依赖关系
  17.  
  18. public void setBookDao(BookDao bookDao) {
  19. this.bookDao = bookDao;
  20. }
  21.  
  22. @Override
  23. public void addBook() {
  24. //调用依赖对象中的save方法,会执行实现类的方法
  25. this.bookDao.save();
  26.  
  27. }
  28. }

2.xml配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6.  
  7. <!--
  8. 模拟spring执行过程
  9. 创建service实例:BookService bookService = new BookServiceImpl() IoC <bean>
  10. 创建dao实例:BookDao bookDao = new BookDaoImpl() IoC
  11. 将dao设置给service:bookService.setBookDao(bookDao); DI <property>
  12.  
  13. <property> 用于进行属性注入
  14. name: bean的属性名,通过setter方法获得
  15. setBookDao ##> BookDao ##> bookDao
  16. ref :另一个bean的id值的引用
  17.  
  18. BookServiceImpl依赖private BookDao bookDao;对象,ref引用bookDao的实现类bean
  19. -->
  20. <bean id="bookServiceId" class="com.jd.di.impl.BookServiceImpl">
  21. <property name="bookDao" ref="booDaoId"></property>
  22. </bean>
  23.  
  24. <!--创建dao实例-->
  25. <bean id="booDaoId" class="com.jd.di.impl.BookDaoImpl"></bean>
  26.  
  27. </beans>

3.测试类

  1. BookTest.java
  1. package com.jd.test;
  2.  
  3. import com.jd.di.BookDao;
  4. import com.jd.di.BookService;
  5. import org.junit.Test;
  6. import org.springframework.beans.factory.xml.XmlBeanFactory;
  7. import org.springframework.context.ApplicationContext;
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;
  9.  
  10. /**
  11. * @author weihu
  12. * @date 2018/8/9/009 0:20
  13. * @desc
  14. */
  15. public class BookTest {
  16.  
  17. @Test
  18. public void BooTestDi(){
  19. String xmlPath="com/jd/di/beans.xml";
  20. ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
  21. BookService bookService = (BookService) applicationContext.getBean("bookServiceId");
  22. /**
  23. * @Override
  24. * public void addBook() {
  25. * //调用依赖对象中的save方法,会执行实现类的方法
  26. * this.bookDao.save();
  27. *
  28. * }
  29. */
  30. bookService.addBook();//最后执行的是save方法
  31. }
  32. }

2.DI依赖注入的更多相关文章

  1. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  2. 谈谈php里的IOC控制反转,DI依赖注入

    理论 发现问题 在深入细节之前,需要确保我们理解"IOC控制反转"和"DI依赖注入"是什么,能够解决什么问题,这些在维基百科中有非常清晰的说明. 控制反转(In ...

  3. DI依赖注入/IOC控制反转

    DI依赖注入# 啥都不说,直接上代码 <?php class UserController { private $user; function __construct(UserModel $us ...

  4. IoC控制反转与DI依赖注入

    IoC控制反转与DI依赖注入 IoC: Inversion of Control IoC是一种模式.目的是达到程序的复用.下面的两篇论文是对IoC的权威解释: InversionOfControl h ...

  5. Spring详解(三)------DI依赖注入

    上一篇博客我们主要讲解了IOC控制反转,也就是说IOC 让程序员不在关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建.初始化.销毁等工作交给spring容器来做.那么创建对象的时候,有可 ...

  6. Spring:(二)DI依赖注入方式

    DI 依赖注入 DI(Dependency Injection)依赖注入,说简单一点就将类里面的属性在创建类的过程中给属性赋值,即将对象依赖属性(简单值,集合,对象)通过配置设值给该对象. 属性注入的 ...

  7. 一) Spring 介绍、IOC控制反转思想与DI依赖注入

    一.spring介绍1.IOC反转控制思想(Inversion of Control)与DI依赖注入(Dependency Injection)2.AOP面向切面的编程思想与动态代理3.作用:项目的粘 ...

  8. AngularJS DI(依赖注入)实现推测

    AngularJS DI(依赖注入) http://www.cnblogs.com/whitewolf/archive/2012/09/11/2680659.html 回到angularjs:在框架中 ...

  9. 大话DI依赖注入+IOC控制反转(一) 之 定义

    转发时请注明原创作者及地址,否则追究责任.原创:alunchen 依赖注入与控制反转      依赖注入与控制反转是老生常谈的问题.一般面试也会面试到这种问题.网上很多很多这方面的资料,搜索出来一大堆 ...

  10. JAVAWEB 一一 Spirng(框架,IOC控制反转,DI依赖注入)

    jar包 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <bea ...

随机推荐

  1. svg转png

    svg转png网络上常用的方式有两种: 1.直接转base64放到图片src进行显示,测试效果不佳,始终报方法问题. 2.先转canvas,再转为png图,测试效果可以但svg透明背景到了canvas ...

  2. 关于163发邮件报错535 Error:authentication failed解决方法

    关于发邮件报错535 Error:authentication failed解决方法 调用163邮箱服务器来发送邮件,我们需要开启POP3/SMTP服务,这时163邮件会让我们设置客户端授权码,这个授 ...

  3. ReactiveX 学习笔记(22)使用 RxJS + Angular 进行 GUI 编程

    课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工 ...

  4. 数据库设计,表与表的关系,一对一。One-To-One(1)

    如何处理对象间one-to-ont的映射关系:one-to-one: 处理一对一关联的方式有两种: 1.主键关联使用主键关联处理一对一的关系. 主键关联不需要额外的表字段:两行是通过这种一对一关系相关 ...

  5. CORSFilter 跨域资源访问

    CORS 定义 Cross-Origin Resource Sharing(CORS)跨来源资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 ...

  6. Shiro Remember me设置

    1. 在Spring的相关配置文件中加入如下Remember me管理器配置: <!-- rememberMe管理器 --> <bean id="rememberMeMan ...

  7. CDH hue下定时执行hive脚步

        今天在看oozie时发现能在hue中执行hive 脚本,主要是hue 和 oozie结合使用,下面介绍下怎么使用的,挺恶心的,哈哈(在这里就不哔哔了) 提交oozie定时作业 1.进入hue界 ...

  8. 如何用poi生成导出excel

    import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Sheet; import java. ...

  9. VueJs学习参考的例子

    his is a vue+mint's demo ,for loler(PAD LOL) https://github.com/yuanman0109/vue2.0-Mint-lolbox   An ...

  10. Power designer 的使用

    1.Powere Designer 逆向 工程 首先 逆向工程 就是将数据库表 导入到模型, 首先新建个模型, 此处就省略 ... 工具栏,数据库(database) 下的 update model ...