DI的全称是Dependency Injection,中文称之为依赖注入。它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。

IoC

在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是控制反转。

DI
从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。

使用setter方法实现依赖注入

1.在com.itheima.ioc包中,创建接口UserService,在接口中编写一个say()方法。

package com.itheima.ioc;
public interface UserService {
public void say();
}

2.在com.itheima.ioc包中,创建UserService接口的实现类UserServiceImpl,在类中声明userDao属性,并添加属性的setter方法。

package com.itheima.ioc;
public class UserServiceImpl implements UserService {private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void say(){this.userDao.say();System.out.println("userService say hello World !");}
}

3.在配置文件applicationContext.xml中,创建一个id为userService的Bean,该Bean用于实例化UserServiceImpl类的信息,并将userDao的实例注入到userService中。

<bean id="userService" class="com.itheima.ioc.UserServiceImpl"><property name="userDao" ref="userDao"/>
</bean>

4.在com.itheima.ioc包中,创建测试类TestDI,来对程序进行测试。

package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {public static void main(String[] args) {ApplicationContext applicationContext =new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService =(UserService)applicationContext.getBean("userService");userService.say();}
}

5.执行程序后,控制台的输出结果如图所示。

什么是Spring的loC和Dl?相关推荐

  1. loc入门案例和解读,带你快速了解spring的loc

    1.loc思想 传统获取资源的方式 自己做饭:要洗菜,烧火,炒菜,煮饭等自己全过程参入工作,非常吃力,你必须熟练的掌握做饭的全部过程和每一个细节 在应用程序中的组件需要获取资源时,传统的方式是组件主动 ...

  2. Spring 核心loC

    目录 1.

  3. Spring loC的介绍

    spring loC的介绍: (文中有部分内容转于这篇文章https://blog.csdn.net/qq_40587575/article/details/79901550) loC--Invers ...

  4. 第12章 Spring AOP之扩展篇

    第12章 Spring AOP之扩展篇 本章内容 有关公开当前调用的代理对象的探讨 有关公开当前调用的代理对象的探讨 注:有关公开当前调用的代理对象的探讨这句话很机械,可以这么理解:把当前目标对象所依 ...

  5. 从AOP到Spring AOP

    文章目录 一.前言 二.AOP基础知识 2.1 AOP 2.1.1 引子:AOP,AOP是什么? 2.1.2 使用对比的方式理解AOP--AOP与OOP 2.1.3 使用对比的方式理解AOP--静态A ...

  6. 【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanFactory体系】

    BeanFactory体系 BeanFactory整体结构体系图 顶层接口-BeanFactory 1.1.描述 1.2.方法解析(15个) 1.2.1.属性 1.2.2.获取bean实例 1.2.3 ...

  7. java 架构发展历史_Java架构发展历程与Spring简介

    一.计算机架构发展历程 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 网站应用的演进 单一应 ...

  8. 腾讯云大老亲码“Spring深度笔记”,不讲一句废话,全是精华

    先来搞清楚,什么是Spring? Spring是一个开源框架,是于2003 年兴起的一个轻量级的Java 开发框架,它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构 ...

  9. 开源框架专栏-spring(1)

    开源框架专栏 1.TOMCAT性能优化整理 2.JVM性能优化整理 3.MYSQL性能优化整理 4.并发编程整理(1) 5.并发编程整理(2) 6.spring整理(1) 7.spring整理(2) ...

最新文章

  1. 什么是区块链技术?初学者指南
  2. android listview 不显示_ListView详细介绍与使用
  3. 中国传感器行业应用规模与投资价值分析报告2022版
  4. 《Two Dozen Short Lessons in Haskell》学习(十)- Private Definitions — the where-clause
  5. POJ 2798:二进制转换十六进制
  6. android layout_width 属性,android:layout_weight属性详解
  7. 攻击 | 破解windows7密码(利用PE系统破解XP密码)
  8. Application Request Routing (ARR) TIME OUT 502
  9. 学python前端需要哪些基础知识_简析前端学习python3的基础
  10. bzoj2463: [中山市选2009]谁能赢呢?(博弈论)
  11. win 7硬盘安装centos7 亲测可行
  12. 译:Dataiku 白皮书之《在银行和保险行业应用数据科学》
  13. mysql 去掉前面的0_去掉前面的0的sql语句(前导零,零前缀)
  14. MarGo: Missing required environment variables: GOROOT GOPATH See the `Quirks` section of USAGE.md fo
  15. 油耗笔记OilNote-记油耗App
  16. 客户/供应商主数据批导
  17. 【iOS】二进制十进制十六进制转换器
  18. 【C语言】练习函数调用
  19. 河海大学 南邮 计算机 排名,2019-2020南京邮电大学排名_全国第132名_江苏第15名(最新)...
  20. 霜蝉DTU对接组态王组态软件的使用方法

热门文章

  1. 关于定时执行任务:Crontab的20个例子
  2. 腾讯不允许其他的 QQ 客户端的原因
  3. open-falcon(小米监控安装)
  4. IOTOS物联中台开发驱动支持中安易科智能门锁API 详解
  5. 【虚幻5学习笔记①】连续普攻的判定和实现
  6. 计算机时间到底是怎么来的?程序员必看的时间知识!
  7. oracle 双活测试,从HDS VSP G1000的ORACLE RAC双活测试报告了解其实现原理
  8. 抖音橱窗与小店有什么区别;抖音保证金如何退回;丨国仁网络资讯
  9. Linux(中科方德服务器版4.0)springboot启动多个服务脚本开机自启
  10. python中函数包括标准库函数吗_Python标准库(一)