Spring框架对控制反转(Inversion of Control,IoC)进行了实现。
Spring IOC容器管理的对象被称作bean,使用IOC,对象的依赖都是在对象创建时由负责协调系统中各个对象的外部实体提供的。
在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
org.springframework.beans.factory.BeanFactory
是Spring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bean,并对bean进行管理。
在Spring中,BeanFactory是IoC容器的核心接口。 它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
Spring为我们提供了许多易用的BeanFactory实现, XmlBeanFactory就是最常用的一个。该实现将以XML方式描述组成应用的对象 以及对象间的依赖关系。XmlBeanFactory类将获取此XML配 置元数据,并用它来构建一个完全可配置的系统或应用
Spring
IOC的使用减少了对象之间依赖的高度耦合。
上图为Spring中IOC容器的原理图。
在Spring中IOC容器可以通过读取配置的元数据来对各个对象(Bean)进行实例化、配置以及装载,而通常在Spring中是使用XML文档来描述元数据的。
在IoC容器中至少都会有一个Bean描述,但往往会有多个Bean的描述,而Bean的定义也非常广泛,包括业务层,服务对象,表示层对象等。
以下为一个基于XML的配置元数据的基本结构(即Spring体验中的applicationContext.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-2.5.xsd">
<!--配置bean的ID,Class类全名等属性,在标签中还会有property等子标签均与该bean相关(需要根据bean来设置)-->
<bean id="..." class="...">
</bean>
<bean id="..." class="...">
</bean>
</beans>
例如:
<bean id="greetingServiceImpl" class="cn.csdn.service.GreetingServiceImpl">
<property name="say">
<value>你好!</value>
</property>
</bean>
对应的Bean的GreetingServiceImpl:
package cn.csdn.service;
public class GreetingServiceImpl implements GreetingService {
/**私有属性*/
private String say;
@Override
public void say() {
System.out.println("你打的招呼是:"+say);
}
public void setSay(String say){
this.say=say;
}
该类继承的接口GreetingService:
package cn.csdn.service;
public interface GreetingService {
void say();
}
那么何为Spring的IoC控制反转呢?
我们来创建一个JUnit测试类:
package cn.csdn.junit;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import cn.csdn.service.GreetingService;
public class GreetingTest {
/**测试GreetingServiceImpl的方法*/
@Test
public void test1(){
/**加载spring容器 可以解析多个配置文件 采用数组的方式传递*/
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
/**IOC的控制反转体现*/
GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");
greetingService.say();
}
}
在测试类中我们看到想要实现IoC的控制反转,首先应该加在容器:
加在容器的写法有以下几种:
①
、可以同时配置多个XML描述文件
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
② 、只能描述当前项目路径下的一个XML描述文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
③ 、使用匹配的方法在路径下寻找符合条件的XML描述文件
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:app*.xml");
然后,我们需要通过IoC的反转机制获得Bean的对象:
GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");
最后,我们通过获得Bean对象调用Bean中的方法,输出如下:
打的招呼是:你好!
请注意:因为刚使用ITEYE博客,对其FCK的排版使用不是很熟悉,所以请大家复制代码的时候把其中的HTML<span></span>标签去掉,在这里大家见谅。
分享到:
相关推荐
Spring框架是Java中最著名的IOC/DI实现,它允许开发者通过配置文件或注解来声明对象及其依赖。 在实际操作中,你可以通过以下步骤动手制作这些框架: 1. 设计ORM框架:定义接口或抽象类,用于表示数据库操作,然后...
Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...
标题 "Spring IOC" 描述了我们讨论的核心主题——Spring 框架中的依赖注入(Inversion of Control,简称 IOC)机制。Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件...
本文将深入探讨Spring的核心特性——控制反转(Inversion of Control,简称IOC),并通过实例解析其工作原理。 控制反转(IOC)是Spring框架的核心设计理念,它将对象的创建和管理权从代码中剥离出来,交由Spring...
【SSH进阶之路】一步步重构容器实现Spring的IoC——解决容器对组件的“侵入式”管理的两种方案--服务定位器和IoC容器(九) 【SSH进阶之路】一步步重构容器实现Spring的IoC——工厂+反射+配置文件实现IoC容器(十)
在探讨Spring框架的核心组件之一——IOC(Inversion of Control,控制反转)容器之前,首先需要理解它在Spring框架中的角色与地位。对于Spring的使用者而言,IOC容器不仅是管理Bean(即应用中的对象实例)生命周期的...
这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...
本案例主要探讨的是Spring框架的核心特性之一——依赖注入(Dependency Injection,简称DI),通常也被称为IOC(Inversion of Control,控制反转)。通过这个小案例,我们可以深入理解Spring如何实现IoC以及属性注入...
《Spring IOC源码解析(一)——整体介绍》 在深入理解Spring框架的过程中,源码分析是不可或缺的一环。本文将对Spring的IOC(Inversion of Control,控制反转)容器的源码进行初步探讨,旨在帮助读者从整体上把握...
举例来说,使用ClassPathXmlApplicationContext可以从classpath的XML配置文件中读取应用程序上下文,从而初始化Spring IoC容器,并加载应用程序中定义的所有bean。而FileSystemXmlApplicationContext则从文件系统中...
在本文中,我们将深入探讨如何使用Spring的Inversion of Control(IoC)容器来实现一个具体的案例:控制打印机(Printer)类与不同类型的纸张(Paper)类的交互。Spring的IoC允许我们解耦组件,使代码更加灵活且易于...
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用...
#### 一、Spring框架的核心——IoC容器 Spring框架是一个开源的轻量级Java开发框架,其核心功能是IoC(Inversion of Control,控制反转)容器和AOP(Aspect Oriented Programming,面向切面编程),这些功能大大...
【Spring IOC测试】\n\n在Java开发领域,Spring框架是不可或缺的一部分,尤其其核心特性——Inversion of Control(IOC,控制反转),更是备受推崇。本文将深入探讨Spring的IOC特性,并通过一个XML配置文件的示例来...
《Spring开发指南——中文版》是由夏昕编著的一本针对Spring框架的中文教程,旨在帮助开发者更好地理解和应用Spring框架。Spring是Java平台上的一个核心框架,广泛应用于企业级应用开发,提供了一种全面的编程和配置...
控制反转,简称IOC,是Spring框架的核心特性之一。传统的编程方式中,对象的创建和管理由程序自身负责,而在IOC中,这个责任被"反转"给了框架。Spring通过容器来管理对象的生命周期和依赖关系,开发者只需定义对象的...
在本文中,我们将深入探讨Spring框架的核心特性——控制反转(Inversion of Control,简称IoC)和依赖注入(Dependency Injection,简称DI),以及如何通过注解配置和Maven项目构建来实现这一概念。Spring框架是Java...
关于Spring框架中的IoC(控制反转)概念,我们可以通过一个幽默的例子来深入理解其核心思想。在编程领域,特别是面向对象编程中,控制反转(IoC)是一种设计原则,用于减少代码之间的耦合度,提高代码的可读性和可...
ApplicationContext是Spring框架中的核心组件之一,它是Bean工厂的高级形式,提供了更多企业级的功能。在这个主题中,我们将深入探讨ApplicationContext的内部机制和关键功能。 ApplicationContext的主要职责是加载...
Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)理念,极大地简化了企业级应用的开发。本篇文章将深入探讨Spring实现...