`
一日一博
  • 浏览: 226985 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring3核心技术之IOC控制反转

阅读更多
个人觉得Spring用起来其实简单,但是如果想真正弄懂原理和思想,还是要花一些功夫和时间的,最近一直在跟论坛的Spring大神jinnianshilongnian的帖子,受益匪浅,我也通过博客把自己的学习过程记录下来。对于IOC理解也可以看看这个:
http://zhidao.baidu.com/question/182355887.html

IoC是什么
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。

简单的来讲,就是由容器控制程序之间的关系,而不是由我们手动编写控制实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

谁控制谁,控制什么:
传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

IoC很好的体现了面向对象设计法则,即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

下面动手做个Spring的演示程序:
首先加入Spring的JAR包,这是基本的JAR包:

然后是开发需要Spring来管理的Bean:

public interface MyBean {
	public void domain();
}

public class MyBeanA implements MyBean{
	public void domain() {
	    System.out.println("MyBeanA is executing...");
	}
}

接口和实现都开发好了,那如何使用Spring IoC容器来管理它们呢?这就需要配置文件,让IoC容器知道要管理哪些对象。下面是配置文件applicationContext.xml的配置:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx" 
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/util
              http://www.springframework.org/schema/util/spring-util-3.0.xsd
              http://www.springframework.org/schema/aop
              http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
              http://www.springframework.org/schema/tx
              http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<!-- id 表示你这个组件的名字,class表示组件类 -->
	<bean id="bean_a" class="com.chou.spring.bean.MyBeanA"></bean>
</beans>

那如何获取IoC容器并完成我们需要的功能呢?首先应该实例化一个IoC容器,然后从容器中获取需要的对象,然后调用接口完成我们需要的功能,代码示例如下:
//可以读取多个配置文件
String[] configs = new String[] {"applicationContext.xml"};
//读取配置文件实例化一个IoC容器 
ApplicationContext cxt = new ClassPathXmlApplicationContext(configs);
//从容器中获取Bean,注意此处完全“面向接口编程,而不是面向实现”
MyBean m = cxt.getBean("bean_a",MyBean.class);
m.domain();



自此一个简单的Spring已完成,让我们深入理解下容器和Bean吧:
详解IoC容器
在Spring Ioc容器的代表就是org.spring.beans包中BeanFactory接口,BeanFactory接口提供了IoC容器最基本功能;而org.spring.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成、国际化处理、事件传播及提供不同层次的context实现(如针对web应用的WebApplicationContext)。简单说,BeanFactory提供了IoC容器最基本功能,而ApplicationContext则增加了更多支持企业级功能支持。ApplicationContext完全继承BeanFactory,因而BeanFactory所具有的语义也适用于ApplicationContext

ApplicationContext接口获取Bean方法简介:
  • Object getBean(String name) 根据名称返回一个Bean,客户端需要自己进行类型转换;
  • T getBean(String name, Class<T> requiredType) 根据名称和指定的类型返回一个Bean,客户端无需自己进行类型转换,如果类型转换失败,容器抛出异常;
  • T getBean(Class<T> requiredType) 根据指定的类型返回一个Bean,客户端无需自己进行类型转换,如果没有或有多于一个Bean存在容器将抛出异常;
  • Map<String, T> getBeansOfType(Class<T> type) 根据指定的类型返回一个键值为名字和值为Bean对象的Map,如果没有Bean对象存在则返回空的Map

总结

非入侵:除了测试程序的代码外,也就是程序入口,所有代码都没有出现Spring任何组件,而且所有我们写的代码没有实现框架拥有的接口,因而能非常容易的替换掉Spring,是不是非入侵。
低耦合:客户端代码完全面向接口编程,无需知道实现类,可以通过修改配置文件来更换接口实现,客户端代码不需要任何修改,是不是低耦合。
灵活性:Bean之间的依赖关系,不由对象自身来负责,而是由容器依据配置文件动态建立,这样就很灵活
  • 大小: 22.5 KB
分享到:
评论

相关推荐

    Spring核心学习IOC部分

    Spring核心学习IOC部分:从最简单的BeanFactory开始一步步完善类似Spring的功能

    IOC控制反转学习文档

    Spring框架学习中的核心,控制反转IOC,理解Spring框架主要注入所依赖的资源,解耦开发

    Java - Spring-IoC(Inverse of Control)–> 控制反转

    ① IoC(Inverse of Control)–&gt; 控制反转 IoC理念: 对象的创建工作交给IoC容器 对象间的依赖关系交给IoC容器查找,在运行期间确定 依赖注入是IoC的主要实现方式 IoC的实现机制: 工厂模式 + 反射机制:工厂模式...

    Spring框架文档 - 核心技术部分 中文版 - 第二部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    Spring 的IOC和AOP特点

    Spring的核心:IOC与AOP。IOC是控制反转或依赖注入,AOP是面向切面编程。

    Spring框架文档 - 核心技术部分 中英双语版 第二部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    SpringMVC精品资源--涵盖了 Spring 框架的核心概念和关键功能,包括控制反转(IOC)容器的使用,面向.zip

    SpringMVC精品资源--涵盖了 Spring 框架的核心概念和关键功能,包括控制反转(IOC)容器的使用,面向

    Spring框架文档 - 核心技术部分 中英双语版 第一部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    深入解析Spring IoC:源码与实践指南

    Spring框架的核心在于其强大的IoC(控制反转)机制,该机制为Java应用提供了一种优雅的依赖注入方式。本文深入探讨了Spring IoC容器的加载过程及其源码实现,揭示了Spring中最为根本的概念之一。这包括从...

    Spring框架文档 - 核心技术部分 中文版 - 第一部分.pdf

    其中最重要的是Spring框架的控制反转(Inversion of Control,IoC)容器(container)。在对Spring框架的IoC容器进行全面介绍之后,将全面介绍Spring的面向切面编程(AOP)技术。Spring框架(Spring Framework)有...

    spring核心组件.txt

    描述了spring的两大核心组件,包括了spring中的IOC控制反转以及DI容器注入,以及springAop面向切面

    IOC之深入理解SpringIoC

    谁控制谁控制什么为何是反转哪些方面反转了在回答这四个问题之前,我们先看IOC的定义:所谓IOC,就是由SpringIOC容器来负责对象的生命周期和对象之间的关系上面这句话是整个IoC理论的核心。如何来理解这句话?我们...

    Spring核心思想

    Spring核心思想分为控制反转(IOC)和切面编程(AOP)。

    SSM框架的学习与应用-Java EE企业级应用开发学习记录-(第六天)初识Spring框架

    Spring IoC的控制反转实例:通过一个示例演示了使用Spring的IoC容器实现控制反转的过程。你将会看到如何配置Spring的IoC容器,定义和注册Bean,以及如何通过注解或XML配置文件来完成依赖注入。 简单工厂模式的实例...

    java面试Spring.pdf

    IOC,Inversion of Control,控制反转 AOP(Aspect-OrientedProgramming),面向切面编程 Spring AOP里面常用名词的概念: Spring容器的启动流程 Spring Bean的生命周期? Spring中bean的作用域 说一下Spring基于xml...

    Springboot入门——初学者对Spring Ioc技术的理解与运用,包含Bean生命周期

    Spring所依赖的两个核心理念:控制反转(Ioc)、面向切面编程(AOP) 初学者可能不理解什么叫控制反转,那么我们来进一步描述一下Ioc。 Ioc是一种通过描述来生成或获取对象的技术,这里的对象当然是指java对象。 在...

    spring框架api中文版.zip(spring开发手册)

    有两种格式,一种和jdk的api一样,另一种是PDF格式,pdf部分目录如下: 即Spring框架的概述 1。 介绍Spring框架 1.1。 依赖注入和控制反转 1.2。... 这个控制反转(IoC)容器 基于Java bean的元数据 元数据定义bean组件内

    Spring总结——Spring容器、Spring中的IoC

    文章目录Spring总结Spring容器控制反转(IoC)基于XML的IoC Spring总结 Spring容器 什么是Spring容器 从概念上讲:Spring 容器是 Spring框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们...

    黑马程序员spring2016springday01上课笔记

    (2)ioc:控制反转, - 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象 - 把对象的创建不是通过new方式实现,而是交给...

    Spring IOC的快速入门案例

    Spring IOC的快速入门案例 &gt;下载Spring的开发包 ...&gt;理解IOC控制反转和DI依赖注入 &gt;编写Spring核心配置文件 &gt;在程序中读取Spring配置文件,通过Spring框架获得Bean,完成相应操作 Spring 4.x的目录结构  

Global site tag (gtag.js) - Google Analytics