IoC与Spring

目录

IoC控制反转

现实案例

特点

目的

DI依赖注入

小总结

介绍Spring

狭义和广义上的Spring

传统编码方式的不足

需求引入

弊端分析

IoC控制反转

现实案例

1、买水果问老板各种水果的口感而不是自己去挨个尝试一遍。

2、买房子找中介而不是自己去花时间找房东。

IoC控制反转的核心理念是:不是最终的消费者去负责创建对象,而是引入一个中间人角色,由这个中间人统一负责对象的创建过程。

特点

1、是一种设计理念,是程序设计遵循的标准

2、代理人创建管理对象,消费者通过代理人获取对象。

3、降低对象之间的直接耦合,将消费者和对象解耦。

目的

加入IoC容器将对象统一管理,让对象关联变为弱耦合。

在这里果商就相当于IoC容器。

DI依赖注入

1、是具体技术实现。

2、在Java中底层通过反射技术实现对象注入。

下文有进一步关于DI的解释。

小总结

1、反转:从对象的使用方去创建对象变成了由IoC容器去创建对象。

2、IoC的好处:

           1)没有代理人之前,使用方需要了解所有对象的内容后,才能知道我们需要的是哪个对象,这种情况下使用方和对象是硬性关联,程序难以维护和扩展。

           2)引入代理人之后,使用方不用去了解所有的对象,直接和IoC容器打交道就行了。使用方和对象之间,通过IoC容器这个代理人,实现了解耦,对象之间更加灵活,方便扩展和维护。

介绍Spring

狭义和广义上的Spring

(1)狭义的Spring框架:通过一种高度的封装和抽象的Java技术,来简化程序的开发,Spring框架提供了IoC容器,来管理系统中的对象及其依赖。

(2)广义的Spring:最原始的Spring是只有一个IoC容器的Spring Framework,对对象集中管理,在此基础上,Spring不断发展,派生了大量的工程和完善的生态体系,由此形成了广义上的Spring。

1、这个IoC容器是一个抽象的,其就相当于在Java的运行内存中,开辟了一块空间,这个空间是由Spring管理的。

2、所有的对象,不是由使用者或者A对象来创建的,都是由Spring IoC容器统一负责创建。

3、当IoC容器,把对象都创建好了之后,由于A对象是依赖于B对象实现全部功能的,但我们不在A对象中去new一个B对象,而是基于反射技术,将A对象的依赖(即B对象)注入到A对象中,这就是所谓的依赖注入(DI)

传统编码方式的不足

需求引入

由一个变成需求引入为何需要Spring:

通过创建maven项目写下以下三个类:

package com.spring.ioc.entity;public class Apple {private String title;private String color;private String origin;//生成默认的构造方法public Apple() {}//方便对象实例化public Apple(String title, String color, String origin) {this.title = title;this.color = color;this.origin = origin;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getOrigin() {return origin;}public void setOrigin(String origin) {this.origin = origin;}
}
package com.spring.ioc.entity;public class Child {private String name;private Apple apple;public Child(){}public Child(String name, Apple apple) {this.name = name;this.apple = apple;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Apple getApple() {return apple;}public void setApple(Apple apple) {this.apple = apple;}public void eat(){System.out.println(name + "吃到了" + apple.getOrigin() + "种植的" + apple.getTitle());}
}
import com.spring.ioc.entity.Apple;
import com.spring.ioc.entity.Child;public class Application {public static void main(String[]args){Apple apple1 = new Apple("红富士", "红色", "欧洲");Apple apple2 = new Apple("青苹果", "绿色", "中亚");Apple apple3 = new Apple("金帅", "黄色", "中国");Child lily = new Child("莉莉", apple1);Child andy = new Child("安迪", apple2);Child luna = new Child("卢娜", apple3);lily.eat();andy.eat();luna.eat();}}

运行结果展示:

弊端分析

1、字符串等文本信息是写死的。 

2、对象是写死的,在编译时就已经确定了。

3、对象之间是硬关联。

传统编码方式很不利于程序的可维护性和扩展性,因为苹果根据季节不同信息会发生变化,孩子的口味和想吃的苹果会发生变化,或者我们想引入一个新的对象都需要对源码进行修改和审批,费时费力,此时Spring应运而生。

Spring最根本的目的就是通过配置的方式,完成对象的实例化,和对象与对象之间的依赖关系,目的都是为了提高程序的可维护性和可扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别找了,这35份Excel自动排班表真的好用!

别再自己做排班表了,调了半天不好看格式还不对。 看看自己需要的是哪些类型的排班表?是公司值班,还是直播排班,还是考勤汇总,总有一个适合你。 刚整理的35份办公常用的排班表,希望能帮到你! …

基于Python的机器学习的文本分类系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

CentOS 7安装Redis

说明:本文介绍如何在CentOS 7操作系统下安装Redis 下载安装 首先,去官网上下载所需要安装的版本,官网地址:https://download.redis.io/releases/,我这里下载3.2.1版本的 下载完,上传到云服务器上&#xf…

<router-link>出现Error: No match for {“name“:“home“,“params“:{}}

在将<a></a>标签换到<router-link></router-link>的时候出现No match for {"name":"home","params":{}}这样的错误&#xff0c;其中格式并无错误&#xff0c; <router-link class"navbar-brand active" …

她在《繁花》大放异彩,“浪姐”暴瘦15斤,打脸了不看好她的观众

不知不觉&#xff0c;《浪姐》已经迎来第5季了。播到第4季的时候&#xff0c;改名成《乘风破浪2023》&#xff0c;这一季叫《乘风2024》&#xff0c;和前几季相比&#xff0c;热度依然不减。 都说3个女人一台戏&#xff0c;更何况这个节目&#xff0c;每次能请到30位姐姐&…

刷题。。。。。。

1.ezmd5 根据题目提示 我们知道应该是要上传两张md5值相同的图片 根据原文链接&#xff1a;cryptanalysis - Are there two known strings which have the same MD5 hash value? - Cryptography Stack Exchange 把保存下来的图片上传一下 得到flag 2.ezhttp 根据原文链接&…

node基础 第二篇

01 ffmpeg开源跨平台多媒体处理工具&#xff0c;处理音视频&#xff0c;剪辑&#xff0c;合并&#xff0c;转码等 FFmpeg 的主要功能和特性:1.格式转换:FFmpeg 可以将一个媒体文件从一种格式转换为另一种格式&#xff0c;支持几乎所有常见的音频和视频格式&#xff0c;包括 MP…

冲上热搜-奇安信今年的年终奖。。

最近,奇安信宣布全员无年终奖&#xff0c;同时冲上了脉脉热搜榜第一。作为网安界的一哥&#xff0c;奇安信的决定无疑给许多期待年终奖的员工带来了沉重的打击。 从公司内部的绩效考核机制来看,奇安信将员工分为了5个档次:S、A、B、B、B-。而大多数员工被评定为中等的B档,这意味…

【网络编程】web服务器shttpd源码剖析——命令行和文件配置解析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之web服务器shttpd源码剖析——命令行解析&#xff0c;在这篇文章中&#xff0c;你将会学习到在Linux内核中如何创建一个自己的并发服务器shttpd&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘…

C++异常学习

C语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除0错误时就会终止程序。返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的错误。如系统的…

ES增强框架easy-es

因为最近做的功能是关于舆情的,所以数据量比较大的,本来打算用MySQL做时间分表来做,但是经过一段时间的测试,发现数据量太大,用时间分表不能满足性能的要求,所以决定将数据存储改为ES,但是短时间内改底层框架又不是一个小工程,时间上不允许,所以找到了一个很合适的框架,他跟myb…

深入理解JVM中的G1垃圾收集器原理、过程和参数配置

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;垃圾收集&#xff08;GC&#xff09;是一个自动管理内存的过程&#xff…

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套

华为海思校园招聘-芯片-数字 IC 方向 题目分享——第四套 (共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;仅供参考&#xff09;&#xff08;共九套&#xff0c;每套四十个选择题&#xff09; 部分题目分享&#xff0c;完整版获取&#xff08;WX:didadida…

「GO基础」起源与演进

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

一文讲明白什么是市场调研

本文主要介绍市场调研的主要步骤和工具方法&#xff0c;并简单介绍了淘宝在电商领域中市场调研的实践。 什么是调研 ▐ 定义 广义的含义&#xff0c;调研既是指市场调查&#xff0c;通过收集、分析和解释相关数据来达到了解企业现状、了解市场趋势、挖掘用户需求、确定产品研发…

『哈哥赠书 - 51期』-『数字风控体系:设计与实践』

⭐️ 赠书 - 《数字风控体系&#xff1a;设计与实践》 ⭐️ 数字风控概述 从2007年开始到2014年左右&#xff0c;高速移动网络和智能手机迅速在大众中普及&#xff0c;开启了移动互联网时代。在这个背景下&#xff0c;企业的产品与服务也出现了两个重要的趋势。 第一个趋势是…

VUE3 + Elementui-Plus 之 树形组件el-tree 一键展开(收起);一键全选(不全选)

需求&#xff1a; 产品要求权限树形结构添加外部复选框进行全部展开或收起&#xff1b;全选或不全选。 实现步骤&#xff1a; tree组件部分&#xff1a; <div class"role-handle"><div>权限选择(可多选)</div><div><el-checkbox v-mode…

Git回滚版本并push到远端master

1、查看日志 git log 2、还原最近的版本 () --git reset --hard commit-id 如&#xff1a;git reset --hard d84da14bf2743683eca7a015f56114faaa344f42 3、覆盖分支版本 git push -f origin dev 回滚本地master完成后&#xff0c;将回滚后的代码push到远端master&#xf…

C++笔记:异常

文章目录 C 运行时错误处理机制及其不足之处C 异常概念异常的使用异常的抛出和匹配原则在函数调用链中异常栈展开匹配原则异常的重新抛出举例演示说明例子一&#xff1a;串联举例演示大部分原则例子二&#xff1a;模拟服务器开发中常用的异常继承体系例子三&#xff1a;异常的重…

C++初级----list(STL)

1、 list介绍 1.1、 list介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 1. list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一…