打破Java定律:无需创建对象--Ioc容器革命-Java基础-Java-编程开发

Spring IoC有什么好处呢? 作者:Mingqi 链接:https://www.zhihu.com/question/23277575/answer/169698662 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

 我们知道,在Java基本教程中有一个定律告诉我们:所有的对象都必须创建;或者说:使用对象之前必须创建,但是现在我们可以不必一定遵循这个定律了,我们可以从Ioc容器中直接获得一个对象然后直接使用,无需事先创建它们。这种变革,就如同我们无需考虑对象销毁一样;因为Java的垃圾回收机制帮助我们实现了对象销毁;现在又无需考虑对象创建,对象的创建和销毁都无需考虑了,这给编程带来的影响是巨大的。

   我们从一个简单例子开始,有一个普通类B代码如下:

public class B implements BI{
     AInfterface a;

     public B(AInfterface a){

       this.a = a

     }

     public void invoke(){

       /** ...*/

     }

}
  有两种使用B的方式:

  普通无Ioc容器的调用方式:
  BI b = new B(new A());//需要在生成B实例之前 生成A等实例
   b. invoke();

使用Ioc容器(Jdon框架)的革命调用方式:

  BI b = (BI) WebAppUtil.getService(“b”);
   b. invoke();
  上面两种方式重要区别:
  前者需要照顾B类中A类的实例化,如果B类中调用不只A类一个,还有更多其他类如C/D/E等类,这样,你在使用B类时,还需要研究其他类的创建,如果C/D/E这些类不是你自己编写,你还需要翻阅它们的API说明,研究它们应该如何创建?是使用New 还是工厂模式 还是单态调用?

  这时,你会感叹:哇,有没有搞错?我只不过是为了使用B类中一个小小的方法,就花去我这么多时间和精力?

  当我们使用第二种方式时,就无需花很多精力和时间考虑A/C/D/E等类的创建。

  使用Ioc容器,你再也不必做这些僵化愚蠢的工作了,我们只需从ioc容器中抓取一个类然后直接使用它们。

  当然,在使用之前,我们需要做一个简单的配置,把你将来需要使用的类全部告诉ioc容器,例如Jdon框架的ioc容器配置jdonframework.xml如下:
<app>
  <services>
    <pojoService name="b" class="test.B"/>
    <pojoService name="a" class="test.A"/>
    <pojoService name="c" class="test.C"/>

  </services>
</app>

注意:虽然B类代码调用了A类(甚至可能调用C等其他类),但是在配置中我们无需考虑这种调用关系。因此,整个环节我们都无需考虑B类中涉及其他类的调用关系;这样是非常省时省力的;特别是如果项目较大,JavaBeans特别多,又是多人协调开发,这种方式对提高开发效率;降低出错率是非常大的帮助。

   如果你的项目中有非常多的类;调用关系很复杂,而且调用关系随时都可能变化,那么,使用无需照顾调用关系的Ioc容器无疑是减轻开发负担的首选。

   ioc容器另外一个著名实现是Spring框架,但是在Spring的配置文件applicationContext.xml中,我们必须考虑上述调用关系:

<bean id="b" class="test.B">
  <property name="a"><ref bean="a"/></property><!-- 必须指定调用关系 -->
   ....
</bean>
<bean id="a" class="test.A">
<bean id="c" class="test.C">
  所以,从以上对比来看,从项目开发效率角度看,基于PiocContainer实现的Jdon框架在实际使用配置效率无疑要高于Spring框架。

  同时,也可以说:基于PiocContainer实现的Jdon框架完全真正实现了Ioc容器的革命性优点:颠覆了“使用对象之前必须创建” 的基本Java语言定律。

Spring实现原理及IoC容器的优点 Spring实现原理、IoC容器的优点及在Eclipse 中创建Spring的 Web应用 立即下载

相关推荐

Spring中IoC优点与缺点解析

主要为大家详细解析了Spring中IoC优点与缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Spring中ioc的优点

​方法,输出了"Hello, World!通过Spring的IOC容器,我们实现了对象的创建和依赖关系的注入,使得代码更加灵活和可维护。​中配置了一个Bean,指定了它的id为​。最后,在代码中通过IOC容器获取了​。在上面的示例中,我们定义了一个接口​。然后在Spring的配置文件​。​,并实现了它的一个具体类​。​的实例,并调用它的​。

牛肉胡辣汤 1427

ubuntu安装hodoop详细步骤

进入到Ubuntu系统中打开桌面,点击鼠标右键打开终端,在终端中输入如下命令这样就可以创建一名为hadoop的新用户。给用户输设置密码输入,输入如下命令,设置密码,按提示输入两次然后为hadoop用户增加管理员全新,这样就可以方便部署完成之后输入重启命令,重启一下Ubuntu系统,然后登录到我们创建的hadoop用户上面reboot。

2301_77603488的博客 9199

Ioc容器的革命性优点

 我们知道,在Java基本教程中有一个定律告诉我们:所有的对象都必须创建;或者说:使用对象之前必须创建,但是现在我们可以不必一定遵循这个定律了,我们可以从Ioc容器中直接获得一个对象然后直接使用,无需事先创建它们。  这种变革,就如同我们无需考虑对象销毁一样;因为Java的垃圾回收机制帮助我们实现了对象销毁;现在又无需考虑对象创建,对象的创建和销毁都无需考虑了,这给编程带来的影响是巨大的。

冰糖糊涂的专栏 1023

PyTorch转ONNX遇到算子不支持?3种实战解决方案+TensorRT适配技巧

本文针对PyTorch模型导出ONNX时常见的算子不支持问题,提供了从诊断到解决的完整实战指南。首先讲解如何精准定位错误根源,随后详细介绍了三种核心解决方案:注册缺失的符号映射、实现自定义算子,以及为TensorRT开发插件的终极落地方案。文章还分享了构建稳健部署流水线的工程化实践,帮助开发者系统性地解决模型部署中的算子兼容性挑战。

fern8的博客 843

SolidWorks + AI:利用 DeepSeek AI 自动生成 VBA Macro 宏,实现智能化建模!

本教程介绍如何将集成到插件,实现的自动化操作。通过 DeepSeek AI,您可以快速生成高效的,提升!💡。

SolidWorksAPI的专栏 1万+

IoC容器的概念、作用、优势等

当应用程序中的组件需要其他组件时,它们不会直接创建这些组件,而是向IoC容器请求所需的组件。容器在其内部维护了一个组件之间的依赖关系图,根据依赖关系将这些组件创建出来并进行组装。依赖注入:IoC容器支持依赖注入,即自动将一个组件所依赖的其他组件注入到它的构造函数或属性中,简化了组件之间的依赖关系管理。生命周期管理:IoC容器负责管理组件的生命周期,可以在组件被创建、销毁或出现异常时进行适当的处理。配置:IoC容器提供了一种统一的配置方式,可以更加方便地管理和配置应用程序中的各个组件。

lonely_baby的博客 1249

计数译码驱动显示电路实验报告_京东方G0A电路、阵列基板、显示 装置及驱动方法广州威彩...

图1、实施例二所述的选择子单元的结构示意图图2、实施例四所述的GOA电路结构示意图图3、实施例七所述的阵列基板的局部结构示意图图4、实施例所述的极性反转驱动方法的第一场的各信号时序图图5、实施例所述的极性反转驱动方法的第二场的各信号时序图图6、实施例所述的极性反转驱动方法的第三场的各信号时序图图7、实施例所述的极性反转驱动方法的第四场的各信号时序图图8、为图4所示时序下,实施例八所述显示...

weixin_35696112的博客 925

为什么要使用IOC

在Java应用程序中,使用IOC的主要目的是将程序的依赖关系从代码中解耦,使得代码更加灵活,易于扩展和修改。提高代码的可测试性:IOC可以帮助我们将依赖关系抽象化,从而使得我们可以在测试时轻松地将这些依赖替换成模拟对象,从而使得测试更加容易。减少代码中的硬编码:通过将依赖关系放在外部容器中管理,可以避免在代码中硬编码依赖,从而使代码更加灵活和易于扩展。降低代码的耦合度:通过使用IOC,我们可以将依赖关系解耦,从而使得代码更加模块化和灵活,降低代码的耦合度。

xizheng2018的博客 821

软考中级网络工程师通关指南:从学习到实战

本文是软考中级网络工程师备考实用指南,先介绍备考前准备,包括考试时间、形式、分值等基本信息,及引导读者评估自身基础以制定学习计划;再推荐官方教材、辅导书籍、在线课程平台和学习社区等优质资源。随后梳理网络协议、设备配置、安全、规划设计等重点知识,剖析企业网络故障排查与园区网络设计典型案例。还分享真题使用、解题技巧、错题本建立等习题解答方法,给出分阶段备考、时间安排与总结反思的备考计划,最后提供考场答题顺序、检查及心态调整策略,助力考生高效备考、顺利通关。

邓邓子的博客 1856

本地通知与健康数据的隐私保护方案

随着移动健康(mHealth)应用的普及,本地通知与健康数据的结合为用户提供了更加个性化的健康管理体验。然而,这种便利性也带来了严峻的隐私保护挑战。本文旨在探讨如何在移动应用中实现本地通知功能的同时,确保用户健康数据的隐私安全。本地通知与健康数据结合的技术架构隐私保护的核心技术方案具体算法实现与数学模型实际应用案例分析本文首先介绍背景知识和核心概念,然后深入探讨隐私保护的技术方案,包括算法原理和数学模型。接着提供实际代码实现和应用场景分析,最后讨论未来发展趋势和挑战。

移动开发前沿的博客 1309

java 革命_打破Java定律:无需创建对象--Ioc容器革命

我们知道,在Java基本教程中有一个定律告诉我们:所有的对象都必须创建;或者说:使用对象之前必须创建,但是现在我们可以不必一定遵循这个定律了,我们可以从Ioc容器中直接获得一个对象然后直接使用,无需事先创建它们。这种变革,就如同我们无需考虑对象销毁一样;因为Java的垃圾回收机制帮助我们实现了对象销毁;现在又无需考虑对象创建,对象的创建和销毁都无需考虑了,这给编程带来的影响是巨大的。我们从一个简单...

weixin_42481708的博客 231

uniapp(全端兼容) - 最新详细实现双色球开奖走势图功能组件,uni-app红球走势图/蓝球走势图,解决双色球 “蓝球连线“ 问题,双色球效果及用线连接每个号码详细教程(同样适用于彩票开奖走势图

uni-app,双色球,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,红球走势,蓝球走势,连线,uniapp(vue):js实现双色球开奖走势图带连线,vue2,vue3,uniApp双色球组件插件,uniapp如何实现双色球走势图和连线,彩票走势图,前端 Vue实现彩票走势图,详细示例,走势图,彩票项目,绘制股票走势图,前端 JS实现彩票开奖走势图 连线,Uniapp有没有双色球的页面代码,红球蓝球的走势图如何做,双色球红球和值尾走势图,

✅ 精选推荐文章 3348

Java面试7天突击指南:从基础到Spring的高频考点与实战策略

在Java技术面试中,掌握核心知识体系与高频考点是成功的关键。理解Java虚拟机(JVM)内存模型、垃圾回收机制以及并发编程中的锁与线程池原理,是构建稳定、高性能应用的基础。这些底层知识不仅体现了开发者的技术深度,也直接关系到系统在高并发场景下的表现与问题排查能力。结合MySQL索引优化与Spring框架的IoC、AOP等核心思想,能够有效提升应用的数据处理效率与架构灵活性。本文聚焦Java面试中最常被考察的HashMap实现、线程池参数、JVM内存区域、索引失效场景等核心“母题”,通过结构化记忆与场景化应

weixin_30315435的博客 571

网络攻防——kali操作系统基本使用

主要介绍如何搭建kali虚拟机,然后介绍了一个简单的攻击方法,切记,网络恶意攻击属于违法行为

weixin_46560512的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

架构师成长之路:面向接口编程的体系化实践

理想区间:0.3 ≤ A ≤ 0.7。

ctotalk 916

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java程序中可以向容器添加组件,瞬间高大上了!

前言 为什么互联网资讯这么发达,但是没有出现技术人才井喷? 为什么会出现应届生薪资倒挂多年老员工的现象? 这个世界有太多的现象都可以用**“二八定律”**来解释。 20%拿着高工资,80%每天挣扎在增删改查边缘。 职场一分钱一分货 人家拿高薪,不是全靠运气 工作年限越久,不代表越值钱 一年经验用了五年,无法改变 因为经历不等于经验 加班“重灾区”的互联网行业以996闻名,每天超过11小时的工作时长每年位居各行业之首。 工作内容重复,加班导致学习时间不够,无法跟上技术更新脚本。 如何花最少时间学习最多知识,迫

m0_57983600的博客 432

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java面试必备:Spring框架与微服务架构深度解析

Spring框架作为Java生态的核心技术栈,其IoC容器和AOP编程模型是构建企业级应用的基础。理解Bean生命周期管理、动态代理机制等底层原理,能帮助开发者应对复杂的依赖注入场景。在分布式架构领域,微服务设计通过服务拆分和治理机制实现系统解耦,其中Saga模式、熔断降级等关键技术保障了高可用性。本文结合三级缓存解决循环依赖、自定义Starter开发等实战案例,剖析从单体应用到云原生架构的演进路径,特别适合准备Java中高级技术面试的开发者参考。

weixin_33910759的博客 386

2021Java高级面试题及答案,值得推荐!

前言 为什么互联网资讯这么发达,但是没有出现技术人才井喷? 为什么会出现应届生薪资倒挂多年老员工的现象? 这个世界有太多的现象都可以用**“二八定律”**来解释。 20%拿着高工资,80%每天挣扎在增删改查边缘。 职场一分钱一分货 人家拿高薪,不是全靠运气 工作年限越久,不代表越值钱 一年经验用了五年,无法改变 因为经历不等于经验 加班“重灾区”的互联网行业以996闻名,每天超过11小时的工作时长每年位居各行业之首。 工作内容重复,加班导致学习时间不够,无法跟上技术更新脚本。 如何花最少时间学习最多知识,迫

m0_56530263的博客 224

字节2023版Java面试指南:从JVM到分布式锁的体系化复习

Java后端开发者的面试准备,本质上是将零散知识点编织成一张可迁移的技术网络。从JVM内存模型、类加载机制到并发编程的AQS与锁升级,再到MySQL索引与Redis缓存一致性,每个模块都需要理解其底层原理与设计取舍。实际工程中,环境变量配置、编译版本不一致(如“源发行版17需要目标发行版17”)、Lombok与JDK版本兼容等细节问题,也常常成为面试追问的切入点。这份字节出品的2023版Java面试指南,以问题驱动的方式串联核心知识,并给出OOM排查、线程池参数调优、分布式锁演进等实战案例,适合跳槽冲刺和项

weixin_33885676的博客 374

开源项目藏宝图:从甄选到贡献的工程师学习指南

在软件工程领域,开源项目是学习和实践的重要资源。理解如何甄选高质量项目,本质上是掌握一套评估软件工程实践的方法论。这涉及从代码质量、架构设计、社区健康度等多个维度进行系统性分析,其核心价值在于帮助开发者从海量信息中高效筛选出具有学习价值的“宝藏”。掌握这套方法,不仅能提升个人的工程能力和架构视野,更能直接应用于解决实际开发中的技术选型与方案设计问题。本文以“开源项目藏宝图”为框架,结合**AI小镇**类模拟项目和**Agentic RAG**等前沿热点,系统拆解了从宏观评估到深度源码阅读,直至参与社区贡献的

cigang4063的博客 379

IOC的优点是什么

ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。 IOC的优点: 第一,资源集中管理,实现资源的可配置和易管理。 第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。 IOC的缺点: 1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。 2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维...

GeekLee的博客 1万+

Spring IoC的好处

转载自https://www.zhihu.com/question/23277575/answer/169698662要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。 什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据

左手大拇指在上 1551

ico的好处

这个容器可以自动对你的代码进行初始化,你只需要维护一个Configuration(可以是xml可以是一段代码),而不用每次初始化一辆车都要亲手去写那一大段初始化的代码。IoC Container的第二个好处是:我们在创建实例的时候不需要了解其中的细节。3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。因为采用了依赖注入,在初始化的过程中就不可避免的会写大量的new。

m0_73719110的博客 264

【Spring IoC】容器和IoC介绍以及IoC程序开发的优势

容器是用来容纳某种物品的(基本)装置。生活中的水杯,垃圾桶,冰箱等等这些都是容器。我们想象,之前的内容中我们接触到了哪些容器?List/Map:数据存储容器Tomcat:Web 容器IoC是Spring的核心思想,也是常见的面试题。其实我们在前面已经使用过了IoC,在类上面添加注解,就是把这个对象交给Spring管理,Spring框架启动时就会加载该类。把对象交给Spring管理,就是IoC思想。

Yeeear的博客 3571
上一篇: 用Java实现HTTP文件队列下载-Java基础-Java-编程开发
下一篇: Java服务器端编程安全必读-Java基础-Java-编程开发
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值