Spring IOC技术

一 Spring IOC技术简介

  图中对象A,B,C和D如果看成手表机芯,任何一个齿轮出现问题,手表都无法正常运转,它们之间的耦合度非常紧密


 IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。

   IOC是为了解决对象之间的耦合度过高的问题,实现对象之间的“解耦”


  IOC是 控制反转,反转了什么?实际是获得依赖对象的过程被反转了。

反转前:需要编写程序代码自主创建,并且先创建依赖对象,对象之间关系紧密。

反转后:对象之间的依赖关系由IOC容器动态管理,且需要对象也由IOC容器负责。

降低耦合度;
有助于团队成员分工明确、责任明晰,容易将一个大的任务划分为细小的任务;
提高可复用性;

维护简单,只需要修改配置即可。


第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。
第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。
第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。

第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。

二 IOC配置

项目中配置Spring的资源配置文件,配置文件是.xml,文件结构:


 项目中每个类实例化通过在xml文件的beans节点中增加bean子节点,一个bean就是一个对象


Id:表示实例化的对象的唯一标识,不能再您项目的配置中出现重复;
Class:表示创建对象的类名称,含有完整的包名路径;

Constructor-arg:表示构造方法参数配置节点,如果没有带参的构造方法,就没有该节点;节点中index表示参数的顺序索引,第一个索引为0,其他以此类推;value表示对应的值

 property:表示属性节点,name表示属性名称,value表示默认的属性值;ref表示值引用,填写的内容一般是bean的id值。

三 IOC应用

问题:实现学生对象的IOC的实例化,学生类结构及学生班级类结构:


常规实现方法:

班级实例化:

StudentClass myclass=new StudentClass();//实例化班级对象
myclass.setId(“001”);
myclass.setName(“16软件技术1班”);
myclass.setCount(0);
学生实例化:
Student stu=new Student (“001”,“wph”);//实例化学生对象
stu.setSex(“001”);
stu.setBirthday(Date.valueOf("2000-1-1"));
stu.setMyClass (myclass);

IOC实现方法



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring IOC是指Spring框架的控制反转(Inversion of Control)容器。它是Spring框架的核心内容,使用多种方式实现了IOC,可以使用XML配置、注解或者零配置来实现。在Spring中,由IOC容器管理的对象称为Bean,这些Bean是由Spring IOC容器实例化、组装和管理的。通过IOC容器,程序可以方便地从容器中获取需要的对象,而不需要自己手动创建和管理对象。Spring IOC容器根据配置文件或者元数据,在初始化时读取配置信息并创建对象,然后将这些对象存入容器中。这种方式能够降低代码的耦合性,提高代码的可维护性和可扩展性。同时,Spring框架还提供了AOP(面向切面编程)技术,满足了Java企业编程中80%的AOP需求,使得开发者能够更加灵活地管理和组织应用程序的结构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringIOC详解](https://blog.csdn.net/qq_41359998/article/details/122495353)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Spring核心技术--IOC](https://blog.csdn.net/ZeronGod/article/details/120411195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值