Spring IOC 和DI 的优势在哪?

捞小鱼 2019-04-19 08:13:00
IOC 小白觉得就是原来需要自己new的类 交给了IOC工厂去处理new类这个事情



DI 就是原来需要我们自己new的类现在可以通过依赖注入


依赖注入需要写 一行代码, new新的类也需要写一行代码 优势在在哪里?


有人说改需要改动构造函数 那我直接new一个无参的构造函数呢?觉得这样好像是就没有什么优势了 非要说优势是不是那个工厂模式里的饿汗模式 不用的时候不需要new是一个优势么?


来自小白的疑问?请求大神解答一下
...全文
450 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangguosheng 2021-01-30
  • 打赏
  • 举报
回复
引用 7 楼 水边2 的回复:
上面的例子用数据库,可能不太合适,毕竟没几个项目天天换数据库的。 你把数据库换成业务来理解,比如商品,今天售价10元,明天五一打8折,节后改成继续打9折,再后来改成原价但是送纸巾。 你不用注入来做,就会陷入天天修改旧代码的旋涡。
感觉这是oop的范畴,应该使用设计模式解决。 DI还是能减少重复new代码+声明周期吧。
游北亮 2019-04-30
  • 打赏
  • 举报
回复
上面的例子用数据库,可能不太合适,毕竟没几个项目天天换数据库的。 你把数据库换成业务来理解,比如商品,今天售价10元,明天五一打8折,节后改成继续打9折,再后来改成原价但是送纸巾。 你不用注入来做,就会陷入天天修改旧代码的旋涡。
游北亮 2019-04-30
  • 打赏
  • 举报
回复
最简单的例子,你今天用MySql,明天要改成Oracle,后天又要改成SqlServer, 常规作法是每天改代码,今天 new MySql(); 明天改成 new Oracle(); 如果用注入的方法,源代码都不用改,新增一个Oracle的实现,然后修改一下配置就可以发布了。
百战天王 2019-04-30
  • 打赏
  • 举报
回复
把功能入口(如:处理web请求、定时任务)绑定到spring管理的bean的方法上; 这些入口bean依赖的其他基础bean,都交由spring来扫描、初始化、注入; 基础bean依赖的配置项也由spring来获取和注入。 例如基础bean是负责操作数据库的,如果不一开始就完全把依赖注入工作交给spring,就可能有外包写出下面这样高度耦合的代码: 入口bean必须在new一个基础bean后,先调用基础bean的init方法来传入数据库配置,然后基础bean的update方法才能正常运行;进而同样的new、init、update三连代码出现在多个不同的入口bean里;甚至各个入口bean从不同的配置文件里读取同一个数据库的地址配置。
lengyulone 2019-04-28
  • 打赏
  • 举报
回复
spring帮你管理那些实例,并且默认是单例模式
许多年以后LP 2019-04-28
  • 打赏
  • 举报
回复
修改的时候好修改 你的项目有很多个new 到时候要修改怎么找
赵牧野 2019-04-19
  • 打赏
  • 举报
回复
简化代码。。。
awitingzz 2019-04-19
  • 打赏
  • 举报
回复
楼主没有搞懂IOC是什么东西,IOC是一种编程思想,不是具体的那种技术,SpringIOC是利用bean容器来管理创建好的实例,这些bean默认是单利的。而DI,就是把实例对象赋值给引用变量,这样可以解决对象之间的循环依赖,使得对象的复用性达到最大。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧