介绍
控制反转(Inversion of Control, IoC)又被称为依赖注入(Dependency Injection, DI)。对象声明它的依赖,通过构造器参数,工厂方法参数,或者对象实例上的属性。IoC容器创建Bean的时候注入这些依赖。Bean不会自己创建这些依赖,而是反过来让容器创建。
包org.springframework.beans
和org.springframework.context
是Spring IoC容器的基础。
BeanFactory
接口提供了高级配置机制,能管理任何类型的对象。ApplicationContext
是BeanFactory
的子接口,它添加了以下特性:
- 与Spring AOP集成
- 消息资源处理(国际化)
- 事件发布
- 应用级别的上下文,比如
WebApplicationContext
简单说,BeanFactory
提供了配置框架和基础功能,ApplicationContext
添加了更多企业级功能。
在Spring应用中,对象是应用的基石,它们被Spring IoC容器管理,被称为Bean。一个Bean被Spring IoC容器实例化、组装、管理。除此之外,Bean只是一个简单的对象。Bean和它们的依赖通过容器中的配置元数据反映。
容器概述
接口org.springframework.context.ApplicationContext
代表Spring IoC容器,它的责任是实例化、组装、管理Bean。容器通过读取配置元数据来实例化、组装、管理Bean。配置元数据被表示为XML配置文件,Java注解或者Java代码。它使你能描述哪些对象组成你的应用,以及对象之间的依赖关系。
Spring提供了几个ApplicationContext
的实现。在独立应用中,一般创建 ClassPathXmlApplicationContext
或者 FileSystemXmlApplicationContext
的实例。
XML文件是定义配置元数据的传统格式。容器也支持Java注解或者代码,通过定义少量的XML配置来开启这些额外的配置格式。
下图在高层面描述了Spring的工作方式。你的应用中的类和配置组装一起工作。当ApplicationContext
被创建并初始化后,你便拥有了一个配置好的、可执行的系统或应用。
配置元数据
<beans/>
下面的<bean/>
元素中定义这些Bean。Java代码通常在@Configuration
类中@Bean
注解的方法中定义。Action
)、基础设施对象(Hibernate的 SessionFactories
)、JMS的 Queues
。通常不会在容器中配置业务领域对象,因为那一般是DAO或业务逻辑的职责。然而,你可以使用Spring集成AspectJ
来配置在容器外创建的对象。<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="..."> //1 //2
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
- id属性是一个标识Bean定义的字符串。
- class属性通过完全描述的类名来标识Bean的类型。