理解Java Spring核心功能之一:控制反转容器(IOC Container)
来源:互联网 发布:双向数据绑定 编辑:程序博客网 时间:2024/05/22 13:00
控制反转空气(IOC Container)是Spring的一个重要基础功能,不喜欢新名词的同学,姑且理解为**组件装配容器**
为什么需要Spring 容器
要理解Spring的设计精神,先来看看Spring的设计初衷。
先看没有Spring之前,我们怎么做?
以一个实际情况说明,大家都应该购买过手机。那么你肯定有这样的经历,收到手机,打开包装,给手机装上SIM卡,装上电池(当然,现在基本都是一体机,这里主要为了给大家说明问题),开机
我们用java面向对象的思想设计
手机,SIM卡,电池,这三个对象,也可以成为实体,物件,组件,零件。
名称不重要,反正就是这三个东西,自然对应三个java类。
package com.study.application.IOCContainer.MobileFactory;public class Battery { private String power; public Battery(String power) { super(); this.power = power; } public String getPower() { return power; }}
package com.study.application.IOCContainer.MobileFactory;public class SIMCard { private String number; public SIMCard(String number) { super(); this.number = number; } public String getNumber() { return number; }}
package com.study.application.IOCContainer.MobileFactory;public class Mobile { private String brand; private Battery battery; private SIMCard simCard; public Mobile(String brand) { this.brand = brand; } public void setBattery(Battery battery) { this.battery = battery; } public void setSimCard(SIMCard simCard) { this.simCard = simCard; } public void poweron() { System.out.println("Moblie:" + brand + " powered on"); System.out.println("Battery:" + battery.getPower()); System.out.println("SIMCard:" + simCard.getNumber()); }}
这里我们不是用Spring容器
package com.study.test.test1;import com.study.application.IOCContainer.MobileFactory.Battery;import com.study.application.IOCContainer.MobileFactory.Mobile;import com.study.application.IOCContainer.MobileFactory.SIMCard;public class Test1 { public static void main(String[] args) { //创建零件 Mobile mobile = new Mobile("HUAWEI"); Battery battery = new Battery("2000mA"); SIMCard simCard = new SIMCard("12356674543"); //组装零件 mobile.setBattery(battery); mobile.setSimCard(simCard); //使用 mobile.poweron(); }}
这里运行结果良好,因为这里只有3个零件,创建和组装都没有问题,但是如果有1000个零件,创建和组装过程就很繁琐。试想,我们在网上买了一个山地自行车,要把它装配起来,我们首先会看货品清单和装配说明书。那么,Spring就是为创建和组装零件而设计的!
模拟简单的容器
在介绍Spring之前,我们先简单介绍一下容器的概念。
在上面的例子中,我们进行一下修改:
package com.study.test.test1;import com.study.application.IOCContainer.MobileFactory.Battery;import com.study.application.IOCContainer.MobileFactory.Mobile;import com.study.application.IOCContainer.MobileFactory.SIMCard;public class Test1 { public static void main(String[] args) { //创建容器 Object[] container = new Object[3]; //创建零件 Mobile mobile = new Mobile("HUAWEI"); Battery battery = new Battery("2000mA"); SIMCard simCard = new SIMCard("12356674543"); //组装零件 mobile.setBattery(battery); mobile.setSimCard(simCard); //放入容器 container[0] = mobile; container[1] = battery; container[2] = simCard; //使用 Mobile mobile = (Mobile)container[0]; mobile.poweron(); }}
以上程序创建数组作为容器,创建和组装实例后放入容器,使用时,从容器中获取实例。这个程序看起来有些多此一举,但确实体现了容器的主要特征。这里,我们手动完成了创建容器->创建和组装实例->放入容器的工作。使用Spring后,这些工作就可以由Spring来完成。这里我们使用数组来作为容器,通过数字下标来获取实例,Spring使用ConcurrentHaspMap作为容器,通过字符串ID获取对象(事实上,在ConcurrentHaspMap内部也是把对象包装一下放在数组里)。这里,我们人工完成零件的组装,而Spring通过配置文件来描述零件之间的装配关系。Spring的配置文件使用XML格式描述组件清单和装配关系,这个配置文件相当于现实生活中的货品清单和装配说明书。
使用Spring容器
使用Spring容器是,需要一个配置文件(货品清单)mobile_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-4.0.xsd"> <bean id="battery" class="com.study.application.IOCContainer.MobileFactory.Battery"> <constructor-arg name="power" value="3000mA"></constructor-arg> </bean> <bean id="simcard" class="com.study.application.IOCContainer.MobileFactory.SIMCard"> <constructor-arg name="number" value="124365546757"></constructor-arg> </bean> <bean id="mobile" class="com.study.application.IOCContainer.MobileFactory.Moblie"> <constructor-arg name="brand" value="HUAWEI"></constructor-arg> <property name="Simcard" ref="simcard"></property> <property name="Battery" ref="battery"></property> </bean></beans>
这里的bean就是对象实例的意思,java里所有的对象实例都可以成为bean,这个配置文件,简单说就是一个bean列表,每个bean通过XML配置其创建其初始值或装配对象,id属性,是为了以后便于从容器中获取。运行程序
package com.study.test.test1;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.study.application.IOCContainer.MobileFactory.Mobile;public class Test1 { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("/moblie_config.xml"); Mobile mobile = (Mobile) context.getBean("mobile"); System.out.println("********见证奇迹**********"); mobile.poweron(); }}
当然,要运行期Spring,我们就必须导入必要的jar包,大家可以去官网下载!
这里的context,简单的理解就是对象容器,Spring通过分析配置文件完成对象创建,装配的工作。使用时,通过ID获取即可!Spring通过配置文件来描述零件清单和装配关系,装配关系变动时,修改配置文件即可,不需要重新编译代码。对于简单的例子,看不出Spring容器的优势。对于很多零件,装配关系复杂多变的系统,就能体现出Spring的优势。Spring容器除了使用xml来配置,还可以使用注解(Annotation)来配置,注解配置,这里就不展开细说了,总之,两者的功能是一样的!
阅读全文
0 0
- 理解Java Spring核心功能之一:控制反转容器(IOC Container)
- The IoC Container 控制反转容器
- Spring 控制反转(IoC)容器
- Spring IOC(控制反转)容器
- spring IOC容器:控制反转
- spring Ioc控制反转理解
- 【Java.Spring.Core】【IoC】IoC容器 - Container
- Spring核心(ioc控制反转)
- Spring框架IOC(控制反转)的核心
- spring核心之IOC控制反转详解
- Spring中的IoC(控制反转)容器初探
- 控制反转(IoC)容器
- Spring控制反转(IoC)的理解
- Spring控制反转(IoC)的理解
- Spring控制反转(IoC)的理解
- Spring控制反转(IoC)的理解
- Spring控制反转(IoC)的理解
- Spring控制反转(IoC)的理解
- Linux Shell 学习笔记(二) 命令
- Maven私服Nexus搭建&应用
- 4.C语言(1)
- 使用OKhttp的封装类 进行本地相册或拍照的图片上传显示
- 前端笔记
- 理解Java Spring核心功能之一:控制反转容器(IOC Container)
- 用Java提供的工具类对一个字符串进行加密
- HDU 3853 LOOPS【期望DP】
- 99乘法表
- PHP对mysql数据库的插入记录
- 5.5
- 使用std::copy将std::map输出到std::cout
- learn opencv-使用OpenCV(C ++ / Python)读取,写入和显示视频
- 5.5