概念
IOC(Inversion of Control):控制反转。
IOC是Spring框架中的一个核心功能,即由SpringIOC容器来管理组件对象的生命周期,负责组件对象的创建和组件对象之间的依赖关系,这样可以大大降低程序各组件之间的耦合关系,符合软件工程中低耦合高内聚的理念。

环境搭建
搭建Spring环境就行,利用开发工具很容易,如果手动建立工程文件就需要下载相应的spring核心架包和配置文件。

为了方面Demo演示,导入Junit4测试包进行测试。

Spring Bean对象管理
Spring可以负责Bean对象的创建工作,主要方法有构造器,工厂静态方法和工厂对象方法3中,最常用是使用构造器创建方法,也就是“new 一个对象”,另外两种也有必要了解一下。
使用JDK中提供的Calendar这个抽象类说明,先查看一下这个抽象类的API和源码(源码可以在jdk安装目录下的src.zip中查看)


有多个重载的getInstance()静态方法,它可以返回Canlendar对象,在这个抽象类中,有个getTime()方法,可以返回一个Date类型的时间对象。
了解了这些,我们可以模拟Bean对象创建的三种方式和它们相对应的通过Spring对象管理完成对象创建的方式。

项目目录结构如下:

TestBean类代码:

package com.hnust;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;public class TestBean {//不使用SpringIOC创建获取对象的三种方式@Testpublic  void test1() {//通过构造器创建对象Calendar c1 = new GregorianCalendar();System.out.println(c1);//通过抽象类静态方法创建对象Calendar c2 = Calendar.getInstance();System.out.println(c2);//通过抽象类对象方法创建对象Date dt = c2.getTime();System.out.println(dt);}//采用Spring容器创建获取对象的三种方式@Testpublic void test2(){//先创建Spring容器对象ApplicationContext act = new ClassPathXmlApplicationContext("spring-config.xml");Calendar cd1 = act.getBean("c1",GregorianCalendar.class);System.out.println(cd1);Calendar cd2 = act.getBean("c2",Calendar.class);System.out.println(cd2);Date date = act.getBean("dt",Date.class);System.out.println(date);}
}

Spring的配置文件:
spring-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--通过构造器创建对象--><bean id="c1" class="java.util.GregorianCalendar"></bean><!--通过抽象类静态方法创建对象--><bean id="c2" class="java.util.Calendar" factory-method="getInstance"></bean><!--通过抽象类对象方法创建对象--><bean id="dt" factory-bean="c1" factory-method="getTime"></bean>
</beans>

在test2()方法中,利用Spring来管理创建对象,大概流程是,程序先创建一个Spring容器对象,容器对象通过getBean()方法去查找spring配置文件中配置bean,根据唯一的bean id创建出相应的对象类型返回,这样就得到了对象,如果有方法可以返回对象,那么就需要填写相应的工厂方法。(这里本来写的好详细,但是坑爹的是博客忘记保存,吃个饭回来机器卡顿,重写就先简略着吧)

这里是程序运行结果:

从程序运行结果来看,上面三行是test1()的依次输出的c1、c2、c3对象的类信息,下面的就是test2()的运行结果,其中红色字体是Spring容器加载的信息,红色字体以下和test1()输出一样。

以上相当于就是学习了一种通过Spring容器来自动创建组件对象的方式,利用的就是IOC机制,将创建对象的控制权交给Sping容器管理。为什么要将创建对象的控制权交给第三方呢,在上述程序中使用Sping创建对象并没有使得程序更加简单,相反还加入了Spring文件架包,JVM还需要加载Spring容器,加重了机器运行负荷,以上程序中,我们只是写一个简单的Demo生成一个对象,并没有涉及各对象之间的关系,在实际的项目中,各组件之间生成的对象太过繁多,而且它们之间往往会有引用调用以及其他的关系,对象之间复杂的关系会让编程逻辑不清晰。由于程序项目的日益复杂,SpringIOC让各对象之间实现解耦的功能就大放异彩了。

举个简单例子说明,毕业生初来北京工作,公司不提供住宿,只能自己找房子,而在北京这种寸土寸金的地方找个理想住所实在困难,北京的房子太多了(复杂程序中类对象太多了),然而要找到性价比高,上班方便的房子(所需要的对象)所以这时候只能找链家、五八同城类似的中介公司和中介网站查找房源信息(Spring配置文件信息),然后把符合自己各方面需求的房子定下来,这样就间接的和房东建立齐了租赁关系,虽然中介方收取了中介费,还提出了各种要求,但是我们总算找到了心仪的房子,节约了大量的时间投入工作,升职加薪,赢取白富美,SpringIOC就是中介方,让程序员极大的提高了编程效率,更专注于业务逻辑编写,而且随着Spring的日益优化,它对于系统性能的影响降低,它的优势远远超过使用它的代价。

SpringIOC对象管理相关推荐

  1. Windows内核对象管理

    Windows内核情景分析:所有的分析都有ReactOS的源代码(以及部分由微软公开的源代码)作为依据:不清楚版本: 对象管理           Windows把一些核心功能作为内核对象来管理,这些 ...

  2. 【PM模块】技术对象管理

    功能位置 功能位置 = 按照以下原则进行分解而形成的多层树状结构. 通常可以通过三种模式(准则)来进行设计. 1.空间位置 2.技术实现 3.功能实现 ⭐那么什么时候创建功能位置呢? 1.当需要描述工 ...

  3. C++ 以对象管理资源

    C++中使用到的资源可能很多,并且一些资源获取后还必须释放归还给系统, 列举几个如: 1. 打开的文件句柄 2. 数据库连接 3. 互斥锁 4. 动态分配new出来的内存 5. 网络socket连接 ...

  4. 深入浅出 - Android系统移植与平台开发(十三)- Android的对象管理

    第六章.Android的对象管理 在Java中,不再使用的对象会通过gc机制来自己主动回收.而Android系统执行时库层代码是由C++编写的,在C++中创建的对象通常使用指针来操作,一旦使用不当.轻 ...

  5. RVC使用指南(三)-对象管理

    RVC使用指南(三)-对象管理 https://mp.weixin.qq.com/s/B3wcxUP-QJRnb_kVIlbZqQ 看了就要关注我,哈哈~ 本文介绍了vSAN中与对象管理相关的RVC命 ...

  6. unity 引用prefab_Unity基础教程-对象管理(二)——对象多样化(Fabricating Shapes)...

    200+篇教程总入口,欢迎收藏: 放牛的星星:[教程汇总+持续更新]Unity从入门到入坟--收藏这一篇就够了​zhuanlan.zhihu.com 本文重点: 1.为形状创建一个工厂 2.保存和加载 ...

  7. cdr对象管理器怎么用_CDR新手必看之对象管理的方法

    原标题:CDR新手必看之对象管理的方法 作为一个专业的矢量绘图软件,CorelDRAW在LOGO设计,广告设计.插画设计.杂志排版.影视动画等很多方面都会用到,实用性很广泛.今天小编给大家介绍一下在C ...

  8. Effective C++ 条款13 以对象管理资源

    // // main.cpp // 条款13:以对象管理资源 // // Created by 于磊 on 2018/7/8. // Copyright © 2018 于磊. All rights r ...

  9. MYSQL 数据库对象管理实验

    MySQL数据库对象管理 [实验2-1]查看INFORMATION_SCHEMA.SCHEMATA表中的信息. [实验2-2]查看INFORMATION_SCHEMA.TABLES表中的信息. [实验 ...

最新文章

  1. 博士真正搞科研的姿势
  2. PTA基础编程题目集-7-4 BCD解密
  3. python3最新版本-Python3第三方组件最新版本追踪实现
  4. python编码规范手册-Python官方竟然给出了一种编码规范PEP 8
  5. python学习笔记(二)---编辑工具sublimeText3运行python
  6. V神以太坊:Casper 权益证明与分片技术最新进展
  7. 生成打印标贴_亚马逊如何打印FBA标签?亚马逊怎么打印FBA标签?
  8. 数据科学家十年后彻底消失?25年行业元老:无稽之谈!
  9. Hadoop命令学习
  10. 讲重点,看趋势——Microsoft Ignite 2018的回顾和展望
  11. 【XML】XML实例模板
  12. alinq mysql_ALinq 使用教程(移植 Linq to SQL 的利器)
  13. GAN在SAR图像仿真中的应用
  14. js定时器原理的深度剖析
  15. 基于帝企鹅算法优化BP神经网络实现数据预测(Matlab代码实现)
  16. 运维与微服务结合?深度解析微服务框架Tars整体解决方案
  17. 计算机无法识别苹果手机,如何解决电脑无法识别iphone的问题?
  18. 都有哪些数据恢复软件是免费的?
  19. 蔚来汽车自动驾驶部门招聘自动驾驶算法研发框架实习生
  20. C#中获得文件夹下所有文件

热门文章

  1. Windows Server 2003 移除系统密码
  2. matlab解坐标方程,用MATLAB求解亥姆霍兹方程的方法
  3. 解决jquery版本过低引发的XSS跨站安全漏洞
  4. 上位机和下位机的区别
  5. channel 的底层原理
  6. BM3D图像去噪算法
  7. 原生js中如何添加dom元素
  8. 几种常见的hash算法
  9. Linux英文环境下登陆Chrome印象笔记插件
  10. MDK-keil安装与使用