控制反转和依赖注入

控制反转和依赖注入控制反转和依赖注入

大家好,又见面了,我是你们的朋友全栈君。

控制反转是通过工厂类,把实现类的方法通过其实现的接口进行调用,并通过扫描所有的@Service注解找到这些类,把他们交给spring容器管理。

依赖注入:是动态的将依赖对象注入到bean组件

单独的讲其中一个不好理解,实际使用一般是:在启动工程时,如果是非懒加载,spring容器会自动扫描特定包下面所有带@Service注解的类,然后通过@Autowire注解注入前面扫描类的实现接口,调用相应方法。

 

控制反转是一种思想,跟依赖注入其实是一个东西,只不过现有控制反转的说法,再有依赖注入。

 

*下面这个网友举的控制反转例子很形象说明了这种思想:

什么是IOC

IOC即控制反转。我们模拟一个场景,小明生在红旗下长在春风里,是咱们社会主义接班人。小明是当今社会自由恋爱的践行者,他可以选择和他喜欢的姑娘约会恋爱,父母也没权干涉(儿大不由娘啊)。但是天有不测风云,一天小明醒来发现自己穿越了(至于怎么穿越我也不知道啊),穿越到了古代,这下蛋疼了,小明的婚姻大事只能听从父母之言媒妁之约,一下子婚姻恋爱主权由自己控制转变为父母和媒人控制了。虽然例子有点荒诞,但却很好的说明了什么是控制反转。对应在编程世界,我们原先需要对象(不是女朋友啊,是Object),一般都是主动new出,这是控制正转,到spring这就不行了,你想要对象实例,ok,你必须通过请求(注解或xml配置方式)获取到对象实例,所有的实例对象由IOC容器管理。

什么是DI

 

 

DI即依赖注入。依赖注入的概念其实和控制反转本质是一样的。只是解读的维度不一样。我们用下面一张图示意一下

控制反转和依赖注入

image.png

看到了吗?小明在古代娶媳妇儿依赖父母和媒人,而在自由恋爱的现代社会需要自己找(new)。好像这么看来自由恋爱更好吧。小伙子你还是太年轻了,自由恋爱你得花心思找个顺眼的姑娘吧,得了解她吧,得花时间和金钱追求她吧,没准时不时还给你点小脾气。但是古代就不一样了,您老就直接等着入洞房了咯(此处应有猥琐的表情),至于如何找到姑娘,如何谈判(对应的类实例就是配置属性),完全不用管,很牛叉有木有!!

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106056.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月23日 下午10:40
下一篇 2022年4月23日 下午10:40


相关推荐

  • webworker和ajax,webWorker

    webworker和ajax,webWorker本篇文章仅供我自己学习使用 不建议从这篇文章中学习 因为文章中可能有错误 传统的 js 都是单线程 webworker 的引入就是为了解决 js 只有单线程的问题 在进行科学计算 密集型计算的时候 webworker 不会阻塞页面 这样对用户体验会有很好的提升 但是 webWorker 和传统语言的多线程还不一样 webworker 里面的内容和主线程内容只能通过 onmessage 和 postmessage 进行通信 不

    2026年3月18日
    2
  • java 手机号正则表达式验证

    java 手机号正则表达式验证java 手机号正则表达式目前是截止 2019 年 6 月最新 适配各种手机号 满足常见号码验证 importjava util regex Matcher importjava util regex Pattern importorg apache commons lang3 StringUtils authorkpzc 三大运营商号码均可验证 不含卫星通信 1349 publicclassm br 2019 br

    2026年3月18日
    2
  • [深度讲解]JVM调优\Tomcat调优

    [深度讲解]JVM调优\Tomcat调优性能调优 1 代码优化所谓代码优化是指对程序代码进行等价 指不改变程序的运行结果 变换 等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同 优化的含义是最终生成的目标代码 运行时间更短 占用空间更小 时空效率优化 原则上 优化可以在编译的各个阶段进行 但最主要的一类是对中间代码进行优化 这类优化不依赖于具体的计算机 在不改变程序运行效果的前提下 对被编译的程序进行等价变换 使之能生成更加高效的目标代码 1 0 编码规范避免随意使用静态变量当某个对象被定义为 static 变量所引用 那么 gc

    2026年3月19日
    3
  • java lang illegalargument_servlet内置对象

    java lang illegalargument_servlet内置对象小编典典介绍该ServletContext#getRealPath()被intented到Web内容的路径(在服务器的磁盘文件系统上展开的WAR文件夹结构的路径)转换为绝对磁盘文件系统路径。该”/”代表Web内容根。即,它代表web以下项目结构中的文件夹:YourWebProject|–src|:||–web||–META-INF||`–MANIFE…

    2025年12月5日
    5
  • 2026年阿里云OpenClaw快速部署教程:一键创建专属AI助手!

    2026年阿里云OpenClaw快速部署教程:一键创建专属AI助手!

    2026年3月13日
    2
  • 高通平台启动过程

    高通平台启动过程高通平台启动过程

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号