近年来,在
JAVA
社区中风起轻量级框架的热潮,“让
J2EE
开发变得简单”,几乎每个月就会有新的轻量级容器出现,这些轻量级容器能够较好地帮助开发者快速地将不同的组件组成一个应用程序,在这些轻量级容器的背后都有一个共同的装配模式,那就是“反向控制”,也就是
IOC
,英文全称是“
Inversion of
Control
”。
Spring
的核心是个轻量级
(LightWeight)
的容器
(Container)
,它是实现
IOC(Inversion of Control)
容器和非侵入性
(No intrusive)
的框架,
Spring
最重要的核心概念是
IOC
,在
Spring
中,“依赖关系的转移”、“依赖于抽象而非实践”是重要的观念,从对象的角度来看,可以避免对象之间的耦合;从容器的角度来看,可以避免应用程序因依赖于容器的功能,而从容器脱离。
Spring
另一个重要核心概念为
Dependency Injection
,中文常翻译为“依赖注入”,简称
DI
。使用
Spring
,不必自己在程序代码中维护对象的依赖关系,只需在配置文件中加以设置,
Spring
容器会自动根据配置,将依赖注入指定的对象。
控制反转
Spring
的核心概念是
IOC
,
IOC
的抽象概念是“依赖关系的转移”。转移是相对于过去不良的应用程序设计来说的,像“高层模块不应该依赖于底层模块,而模块都必须依赖于抽象”是
IOC
的一种表现,“实现必须依赖抽象,而不是抽象依赖于实现”是
IOC
的另一种表现,“应用程序不应该依赖于容器,而是容器服务于应用程序”也是
IOC
容器的一种表现。
IOC
的
Control
是控制的意思,其实背后的意义也是一种依赖关系的转移。如果
A
依赖于
B
,其意义即
B
拥有控制权。如果转移这种关系
(
依赖关系的反转即控制关系的反转
)
,将控制权由实现的一方转移到抽象的一方,让抽象方拥有控制权,可以获得组件的可重用性。
IOC
在容器中扮演的角色,可以用好莱坞的一句名言来表示:“
Don’t call me
,
I’ll call you
”。以程序的术语来说,就是“不要向容器要求所需要的
(
对象
)
资源,容器会自动将这些对象给你”。
IOC
的要求是容器不应该
(
或尽量不要
)
侵入应用程序,也就是不应该出现与容器相依的
API
。应用程序本身可以依赖于抽象的接口,容器可以通过这些抽象接口将所需的资源注入至应用程序中。应用程序不向容器主动要求资源,故而不会依赖于容器特定的
API
,应用程序本身不会意识到正被容器使用,故而可以随时从容器系统中脱离,转移至其他的容器或框架而不需要作任何的修改。
依赖注入
依赖注入的意义是:“保留抽象接口,让组件
(Component)
依赖于抽象接口,当组件要与其他实际的对象发生依赖关系时,由抽象接口来注入依赖的实际对象。”
依赖注入通常有三种方式:
Interface injection
、
Setter
injection
、
Constructor injection
。
接口注入 (Interface injection)
因为接口注入需要特定的接口,这样使程序具备侵入性,所以
Spring
抛弃了这种注入方式。
设值注入 (Setter injection)
set
注入就是在程序中给每个变量都增加一个
set
方法,用来设置该属性的值。
构造子注入 (Constuctor injection)
构造子注入就是在需要注入的类中定义一个构造方法,应在构造方法中定义需要注入的实例元素,通过类的构造器来完成协助该类工作的其他实例的初始化。
Spring
的核心是个
IOC
容器,可以管理对象的生命周期,并可以通过
Setter
或构造函数的方式,编写配置文件
(
一个
XML
文件或是通过注解
)
,让
Spring
在执行时期根据配置文件的设定,建立对象之间的依赖关系。这不仅减少了大量的程序编写,降低了对象之间的耦合程度,通过
Spring
这类成熟的框架,还可以大幅提升应用程序的可靠性。
分享到:
相关推荐
这个基础jar包集合包含了Spring框架实现IOC功能所需的基本组件。以下是对这些jar包及其包含的知识点的详细解释: 1. `org.springframework.context-3.0.6.RELEASE.jar`: 这个jar包提供了Spring应用上下文的支持,它...
3. Spring IOC基础:讲解Spring框架的核心概念,如Bean工厂、ApplicationContext和依赖注入。 4. Spring的XML配置与注解配置:如何在XML文件中声明Bean和依赖,以及使用注解实现相同功能。 5. Spring的AOP:如何通过...
- **Bean工厂(BeanFactory)**:Spring的基础容器,负责管理Bean的生命周期和依赖关系。它是IOC的底层实现,提供了对Bean的高级配置和管理。 - **应用上下文(ApplicationContext)**:是BeanFactory的扩展,除了...
标题 "Spring IOC" 描述了我们讨论的核心主题——Spring 框架中的依赖注入(Inversion of Control,简称 IOC)机制。Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它极大地简化了Java应用的开发,通过将对象的创建和管理交由Spring容器来处理,开发者可以更专注于业务逻辑。下面,我们将深入探讨Spring IOC...
1. `spring-beans.jar`: 这个包包含了Spring框架的基本组件,如Bean工厂,它是IoC容器的基础,负责读取配置元数据(XML或Java注解),并根据这些信息创建和管理Bean。 2. `spring-context.jar`: 这个包扩展了`...
- `BeanFactory` 是Spring IoC容器的顶层接口,代表了IoC容器的基础原则和能力。其不能被实例化,提供了一套IoC容器必须遵循的基本原则。 - `ApplicationContext` 是在 `BeanFactory` 的基础上,添加了更多功能的...
总结,Spring的IOC容器是其强大功能的基础,通过控制反转实现了对象的解耦和依赖管理,极大地提高了代码的可维护性和灵活性。理解并熟练运用IOC容器,对于提升Java企业级应用的开发效率具有重要意义。
BeanFactory是最基础的容器,它实现了基本的IOC功能,如加载和管理Bean的定义。BeanDefinition是Spring中用于描述Bean实例的关键数据结构,包含了Bean的属性、依赖对象、构造器参数等信息。而ApplicationContext则是...
Spring框架是一个开源的Java平台,提供了全面的基础架构支持,让开发者能够轻松地开发出松耦合的应用程序。它通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect Oriented Programming, AOP)等特性...
Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)功能而闻名...这将为你在实际项目开发中使用Spring框架打下坚实的基础。
这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...
- **BeanFactory**:这是Spring提供的最基础的IoC容器接口,定义了一些用于获取Bean实例的基础方法。如`getBean`用于获取指定名称的Bean实例;`containsBean`用于检查是否存在指定名称的Bean;`isSingleton`用于判断...
通过实际操作,我们可以更深入地理解Spring的内部机制,为后续的高级特性学习和框架优化打下坚实基础。 总结,Spring的IOC和MVC设计模式是现代Java应用开发的基石,它们极大地提高了代码的可维护性和灵活性。通过...
Spring IOC(Inversion of Control...总结来说,这个示例源代码提供了一个基础的Spring IOC应用模型,包括了bean的定义、依赖注入以及测试。通过学习和理解这些文件,你可以更好地掌握Spring框架的核心理念和使用方式。
### Spring IoC与事务管理架构解析 #### 一、Spring IoC容器的构建与工作原理 **Spring**作为一款轻量级的Java开发框架,在Java企业级应用领域扮演着极其重要的角色。其中,**IoC(Inversion of Control,控制反转...
1. **无参数构造函数配置**:最基础的配置方式,如`<bean id="happyComponent" class="com.itbignyi.ioc_01.HappyComponent"></bean>`,容器会使用无参构造函数创建`HappyComponent`实例。 2. **工厂方法配置**:...
3. **Bean工厂和ApplicationContext**:Bean工厂是Spring容器的基础实现,而ApplicationContext是更高级的容器,它提供了更多的企业级服务,如消息源、国际化支持等。ApplicationContext从配置文件中读取Bean的定义...