我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring IOC降低耦合的问题怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring IOC降低耦合的问题怎么解决

本篇内容主要讲解“Spring IOC降低耦合的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC降低耦合的问题怎么解决”吧!

一、传统方式创建对象

通常我们是这样创建对象的

WuliCar wuli = new WuliCar();wuli.run();

第一天:二明想用一辆车,然后通过 new 搞了一辆五菱荣光,调用 run 方法开始使用,车子跑起来了,很高兴。

一个月后:二明公司赚钱了,不想开五菱了,想换辆宝马,接下来二明一顿操作:

BaomaCar baoma = new BaomaCar();baoma.run();

很好,车子从五菱换成了宝马,跑起来了,很高兴。

半年后:二明公司赚大钱了,二明想搞辆直升机,接下来又一顿操作

ZhiShenJi zhi = new ZhiShenJi();zhi.fly();

这次改动比较大,宝马换成直升机,run 换成了 fly。

看到这里先思考一下,不想往下看,这样做有什么问题吗?

思考时间到,我们接着往下看。

从代码看好像没多大问题,不就改了两行代码嘛,这有啥。你想想,如果你的代码中有 1000 个地方都是这么写的,你想把宝马换成直升机岂不是要改 1000 次,run 改成 fly 又要改 1000 次,晚上别想下班了。

二、接口编程

经过上次一顿操作,二明加了好几天班才弄完,二明想想每天这么搞不得累死,不行,得想想办法。于是二明脑子一转了,一想就想到了。我定义好一些方法,大家都按照这个规则来,不就好了。

public interface vehicle {    // 定义一个交通工具接口,有一个 work 方法void work();}

宝马实现这个接口:

public class Baoma implements vehicle {    @Override    public void work() {System.out.println("宝马跑起来");            }}

飞机实现这个接口:

public class ZhiShenJi implements vehicle {    @Override    public void work() {System.out.println("直升机飞起来");            }}

经过上面改造后,后面二明想把宝马换成直升机的时候只需要修改 new 那块就可以了,省了很多时间

三、工厂方法

利用接口确实好一些了,但是问题还是没有解决。为了提高内聚性,专职类负责特定的事情,所以我们使用一个类作为工厂类,既能生产 Car 又能生产 ZhiShenJi

class VehicleFactory{VehicleFactory(){}public static Vehicle getInstance(String type){Animal result = null;if("car".equals(type)){result = new Car();}if("zhishenji".equals(type)){result = new ZhiShenJi();}return result;}}

如果有一次我想锻炼身体,想骑自行车了,那么很简单

class VehicleFactory{VehicleFactory(){}public static Vehicle getInstance(String type){Animal result = null;if("car".equals(type)){result = new Car();}if("zhishenji".equals(type)){result = new ZhiShenJi();}        if("zixingche".equals(type)){result = new ZiXingChe();}return result;}}
Vehicle vehicle = VehicleFactory.getInstance("zixingche");vehicle.work();

这种方法把创建对象的过程交给了一个专业的类(Factory),我只需要告诉他我需要什么(参数),他就会返回给我正确的对象,只是解决了内聚性的问题,但是他并没有解决我的声明语句七零八落的散落在程序中,我还是需要去将参数从car替换为zixingche

四、反射

后来二明想到一个更绝妙的主意.我在写程序的时候不告诉工厂我需要什么,等到运行的时候我再告诉工厂我需要什么,再利用反射技术给我生产出来不就可以了吗?二明说干就干

Vehicle vehicle = VehicleFactory.getInstance(读取配置文件);vehicle.work();我想要的:zixingchezixingche.work();

大功告成,这样我要什么,都写在一个配置文件中,利用反射技术就可以创建好,这样我就不用在生产了,下次换车的时候直接去配置文件中修改就好了,代码中不用修改。

对于生产对象这件和业务没有直接关系的事情,我们已经提取给了专业的工厂,专业的工厂还是根据配置文件进行的生产,想生产什么我只需要改一处即可,这就是降低了耦合性(生产对象和业务之间的耦合,让生产对象对业务的影响降到了最低)。

五、Spring IOC

上面第四点说的那些功能,Spring IOC 已经帮助我们实现了,Spring IOC 就是利用工厂模式+反射实现自动生产对象,管理对象生命周期的功能。降低了代码的耦合

到此,相信大家对“Spring IOC降低耦合的问题怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring IOC降低耦合的问题怎么解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring IOC降低耦合的问题怎么解决

本篇内容主要讲解“Spring IOC降低耦合的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC降低耦合的问题怎么解决”吧!一、传统方式创建对象通常我们是这样创建对
2023-07-02

Windows 11降低NVMe SSD性能的问题怎么解决

本篇文章给大家分享的是有关Windows 11降低NVMe SSD性能的问题怎么解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。自Windows11推出以来,就出现了许多的问
2023-06-27

node.js怎么降低版本解决sass和node.js冲突问题

这篇文章主要讲解了“node.js怎么降低版本解决sass和node.js冲突问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js怎么降低版本解决sass和node.js冲突问题
2023-07-05

Windows11中的低音频问题怎么解决

本文小编为大家详细介绍“Windows11中的低音频问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Windows11中的低音频问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
2023-04-13

node.js降低版本的方式详解(解决sass和node.js冲突问题)

这篇文章主要介绍了node.js降低版本的方式(解决sass和node.js冲突),本文是因为sass版本和node版本不匹配(可以找一下对应的版本),本文给大家详细讲解,需要的朋友可以参考下
2023-02-22

golang接口性能低问题怎么解决

要解决Golang接口性能低的问题,可以尝试以下几种方法:使用具体类型而非接口类型:接口类型在运行时需要进行类型断言,会增加一定的开销。如果可以确定某个具体类型,尽量使用该具体类型,而不是接口类型。减少接口的方法数量:接口方法越多,实现该接
2023-10-23

python多线程效率低问题怎么解决

Python中的多线程效率低的问题主要是由于Python的全局解释器锁(GIL)导致的。GIL是Python解释器中的一个机制,它确保同一时刻只有一个线程执行Python字节码。要解决Python多线程效率低的问题,可以考虑以下几种方法:1
2023-09-04

怎么解决Struts Hibernate的整合问题

这篇文章主要介绍“怎么解决Struts Hibernate的整合问题”,在日常操作中,相信很多人在怎么解决Struts Hibernate的整合问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决Str
2023-06-17

spring怎么解决相互依赖问题

在Spring中,可以通过以下几种方式解决相互依赖问题:1. 构造函数注入:使用构造函数将依赖项作为参数传递给类的构造函数,从而实现依赖注入。这样可以确保依赖项在对象被创建时已经存在,避免了循环依赖的问题。2. Setter方法注入:使用s
2023-08-16

Spring循环依赖问题怎么解决

在Spring中,循环依赖问题是指两个或多个bean之间出现相互依赖的情况。由于Spring容器默认使用单例模式管理bean,因此循环依赖可能导致bean无法正确创建。解决Spring循环依赖问题,可以尝试以下方法:1. 避免使用构造函数注
2023-08-31

PyTorch中怎么解决过拟合的问题

PyTorch中解决过拟合问题的方法有很多种,以下是一些常用的方法:正则化:在损失函数中添加正则项,如L1正则化或L2正则化,可以限制模型参数的大小,有助于减少过拟合。Dropout:在训练过程中随机丢弃一部分神经元,可以减少神经元之间的依
PyTorch中怎么解决过拟合的问题
2024-03-05

怎么解决Git合并冲突的问题

本篇内容介绍了“怎么解决Git合并冲突的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!合并并不仅仅是简单的文件添加、移除的操作,Git
2023-06-04

怎么解决人工智能PCA降维后的报错问题

本篇内容主要讲解“怎么解决人工智能PCA降维后的报错问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决人工智能PCA降维后的报错问题”吧!问题:PCA降维后的feature数如果少于样本
2023-06-01

ArrayList集合容器问题怎么解决

本篇内容主要讲解“ArrayList集合容器问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ArrayList集合容器问题怎么解决”吧!ArrayList 踩坑首先大家看看这段代码有什
2023-06-16

Spring中applicationcontext未注入问题怎么解决

确保在Spring配置文件中正确声明了需要注入的bean,如在XML配置文件中使用定义或者在Java配置中使用@Configuration注解进行声明。确保在需要注入的类中使用@Autowired或@Resource等注解进行依赖注入,例如
Spring中applicationcontext未注入问题怎么解决
2024-03-07

spring boot自带的page分页问题怎么解决

这篇“spring boot自带的page分页问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“spring boo
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录