Spring学习(四)Spring容器的IOC应用
2017-05-24 20:24
351 查看
一、Spring IOC概念
IOC全称Inversion of Control,被译为控制反转。IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建、注入。第三方框架一般是通过配置方式指定注入哪一个具体实现,从而降低了对象之间的耦合度。
IOC按实现方法不同,可以分为依赖注入DI(Dependency Injection)和依赖查找两种,Spring容器是采用DI方式实现了IOC控制,IOC是Spring框架的基础和核心;
从IOC概念来看,IOC帮我们干了两件事,一就是创建对象,二就是管理对象之间的关系。通过IOC中文的翻译,控制反转我们也更容易理解了,以前我们想要调用一个类中的方法,我们必须主动new对象,然后再调用方法。现在呢?Spring替我们把这件事干了,现在我们由主动创建对象转变为被动注入,以前的主动权在我们手里,现在主动权在Spring手里,以前我们创建的对象的硬编码转变为动态注入了,这也提高了我们程序的健壮性,降低了耦合度。我觉得这就是IOC的核心所在。
DI全称是Dependency Injection ,被译为依赖注入。
DI的基本原理就是将一起工作具有关系的对象,通过构造方法参数或方法参数传入建立关联,因此容器的工作就是创建bean时注入那些依赖关系。
IOC是一种思想,而DI是实现IOC的主要技术途径。
DI主要有两种注入方式,即Setter注入和构造器注入。
setter注入
通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现setter方式的注入。
public class Hello { public void sayHello() { System.out.println("say hello"); } } public class HelloSpring { private Hello hello; //setter注入 public void setHello(Hello hello) { this.hello = hello; } public void sayHello() { hello.sayHello(); } }
在applicationContext.xml中配置注入参数
//告诉Spring容器实例化Hello Bean <bean id="hello" class="com.spring.demo.Hello"></bean> //实例化HelloSpring时将hello通过setter方法注入到HelloSpring中 <bean id="helloSpring" class="com.spring.demo.HelloSpring"> //property表示属性,也就是成员变量 //name表示成员变量的名称 //ref表示引用,也就是将id为hello的bean作为参数注入 <property name="hello" ref="hello"> </bean>
setter注入图解
同样我们以Hello为例,演示一下Constructor(构造器)注入
public class Hello { public void sayHello() { System.out.println("say hello"); } } public class HelloSpring { private Hello hello; //根据规范使用有参构造必须向外界提供无参数构造 public HelloSpring(){} //Constructor注入 public HelloSpring(Hello hello) { this.hello = hello; } public void sayHello() { hello.sayHello(); } }
在applicationContext.xml中配置注入参数
//告诉Spring容器实例化Hello Bean <bean id="hello" class="com.spring.demo.Hello"></bean> //实例化HelloSpring时将hello通过Constructor注入到HelloSpring中 <bean id="helloSpring" class="com.spring.demo.HelloSpring"> //constructor-arg表示构造器参数 //index表示第几个参数,也就是参数的索引,从0开始 //ref表示引用,也就是将id为hello的bean作为参数注入 <constructor-arg index="0" ref="hello"/> </bean>
我想通过Spring中的依赖注入我们就能知道,java中甚至是所有编程语言中规范的重要性了,如果没有遵守JavaBean规范,那么Spring就根本无法为我们工作。当然其他依赖JavaBean规范的框架也都无法为我们服务。
相关文章推荐
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- 学习《spring 3.x企业应用开发实战》之在IoC容器中装配Bean
- 学习《spring 3.x企业应用开发实战》之IOC容器概述
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- 【Spring】IOC核心源码学习(二):容器初始化过程
- spring学习笔记:ioc容器高级特性
- Spring源码学习IOC(3):IoC容器载入Bean定义资源文件
- spring源码学习之路---深度分析IOC容器初始化过程(四)
- (一)Spring 的 Ioc容器 《Spring揭秘》学习
- spring源码学习之路---IOC容器初始化要义之bean定义载入(五)
- spring IOC学习,手动实现IOC容器
- Spring IoC之高级应用--使bean感知容器
- Spring源码学习IOC(4):IoC容器解析Bean定义资源并注册解析后的Bean
- [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。
- 【Spring】IOC核心源码学习(二):容器初始化过程
- Spring视频学习笔记(1)IoC容器
- Spring学习文档_IOC配置与应用
- 【Spring学习笔记】Spring框架的IoC容器学习笔记