`
一日一博
  • 浏览: 230434 次
  • 性别: 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控制反转的核心思想是将对象的创建和管理交给了Spring容器,从而实现了组件间的解耦。这种方式极大地提高了代码的可维护性和扩展性,是现代Java开发中不可或缺的一部分。

    spring技术--IOC控制反转课件.ppt

    **Spring技术--IOC控制反转** 在Java开发领域,Spring框架以其强大的功能和广泛的应用而闻名。其中,IOC(Inversion of Control,控制反转)是Spring的核心特性之一,它改变了传统对象创建和管理的方式,实现了依赖...

    Spring核心学习IOC部分

    在Spring框架中,IOC(Inversion of Control,控制反转)是其核心概念之一,它改变了传统应用程序中的对象创建和管理方式。本学习资料主要聚焦于Spring的IOC容器,特别是从最基本的BeanFactory开始,逐步深入理解...

    Spring中使用Ioc控制反转

    ### Spring框架中的IoC控制反转详解 #### 一、IoC概述 控制反转(Inversion of Control,简称IoC)是一种设计思想,在Spring框架中,它主要用来解决对象依赖问题。传统的面向对象编程中,对象之间的依赖关系由对象...

    helloIoc.zip spring ioc控制反转简单测试代码

    Spring框架的核心特性之一就是依赖注入(Dependency Injection,简称DI),它通过控制反转(Inversion of Control,简称IOC)实现。这个"helloIoc.zip"压缩包包含的是一组用于演示Spring IOC基本概念和使用的测试...

    学习Spring笔记_IoC(控制反转)简介

    **Spring框架中的IoC(控制反转)概念** 在软件开发中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从代码中剥离出来,交由一个容器来处理。Spring框架是Java平台上的一个核心...

    springIOC控制反转 依赖注入实例

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它改变了传统Java应用程序中对象的创建和管理方式。在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些...

    Spring框架IoC控制反转.pdf

    【Spring框架IoC控制反转】 一、Spring框架是什么 Spring框架是Java开发中的一款轻量级框架,诞生于2003年,旨在简化企业级应用的开发复杂性。Spring的核心理念包括控制反转(IoC)和面向切面编程(AOP)。作为一...

    Spring IOC控制反转 1

    **Spring IOC控制反转详解** 在Java开发中,Spring框架的核心特性之一就是IOC(Inversion of Control,控制反转),它改变了传统程序设计中的对象依赖管理方式,使得开发者可以更专注于业务逻辑,而不是对象的创建...

    springIoc实现原理

    Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中...

    IoC Spring 控制反转

    ### IoC Spring 控制反转详解 #### 一、IoC概念与重要性 在深入了解Spring框架之前,我们首先需要理解“控制反转”(Inversion of Control,简称IoC)的概念。IoC是一种设计原则,旨在减少组件之间的耦合度,提高...

    IOC控制反转代码,bilibili配套文件

    IOC控制反转代码,bilibili配套文件 IOC(Inversion of Control,控制反转)是 Spring 框架的核心机制之一,它是一个用于创建和管理对象的容器。控制反转是将对象的创建进行反转,常规情况下,对象都是开发者手动...

    IOC控制反转学习文档

    ### IOC控制反转学习文档 #### 一、控制反转(IOC)概述 控制反转(Inversion of Control,简称IOC),是Spring框架的核心概念之一。它通过管理对象间的依赖关系,实现了对象的解耦,使得代码更加灵活且易于维护。在...

    Java仿Spring框架IOC控制反转利用反射简单实现(源码)

    Java中的控制反转(IOC,Inversion of Control)和Spring框架是现代企业级应用开发的核心概念。IOC使得应用程序的组件之间解耦,提高了代码的可测试性和可维护性。本篇文章将详细探讨如何通过反射机制来实现一个简单...

    廖雪峰 Spring 2.0 核心技术与最佳实践 高清扫描版

    该教程首先会介绍Spring的基本概念,包括依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC),这是Spring的核心设计理念,能够帮助开发者降低组件之间的耦合度,提高代码的可测试性和可...

    IOC控制反转机制的讲解

    1. IOC(控制反转):将对象的创建和管理的责任从对象自身转移到一个外部容器(如Spring框架),对象不再控制其依赖对象的生命周期。 2. DI(依赖注入):是IOC的一种实现,通过容器将依赖对象注入到需要它的对象中...

    Spring控制反转(IoC)的理解

    Spring框架的核心特性之一是控制反转(Inversion of Control,简称IoC),也常被称为依赖注入(Dependency Injection,简称DI)。IoC是一种设计模式,它将对象的创建和管理从应用代码中解耦出来,使得系统更易于维护...

    Spring自学笔记-Ioc(控制反转)容器

    Spring的核心特性之一就是Inversion of Control (IoC),也就是所谓的“控制反转”。 #### 二、IoC容器的基本概念 IoC容器是Spring框架的核心部分,它的主要功能是管理对象的生命周期和依赖关系。在Spring中,所有...

    Spring 5.2.9的IOC核心jar包

    Spring框架是Java后端开发中的一个关键组件,尤其在依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)领域,它扮演着至关重要的角色。Spring 5.2.9版本是该框架的一个稳定版本...

    IOC详解IOC详解IOC详解IOC详解

    控制反转(IOC,Inversion of Control)是一种设计模式,它在软件工程中被广泛应用,特别是在Java开发中。IoC的核心思想是将对象的创建和管理权交给一个外部容器,而不是让对象自行创建和管理依赖。这有助于降低耦合...

Global site tag (gtag.js) - Google Analytics