Spring Core /02 IoC 容器 / 容器总览

上一篇:Spring Core /01 IoC 容器 / IoC 容器 和 Beans 介绍

样例代码:Spring Core Sample

参考文献:The IoC Container


org.springframework.context.ApplicationContext 接口代表 Spring 的 IoC 容器,负责实例化、配置、装配 Bean
容器通过读取配置元数据来获知如何实例化、配置、装配对象
配置元数据由 XML、Java 注解或 Java 代码来表示

Spring 提供了多个 ApplicationContext 接口的实现
在独立运行的应用中,通常会使用 ClassPathXmlApplicationContextFileSystemXmlApplicationContext
XML 是定义 “ 配置元数据 ” 的传统形式,也可以使用 Java 注解或 Java 代码的形式来定义 ” 配置元数据 ”
只需要少量的 XML 配置就可以声明式地开启对 Java 注解或 Java 代码形式的 ” 配置元数据 ” 的支持

在大多的场景下,不需要显式的用户代码来实例化一个或多个 Spring IoC 容器
例如在 Web 应用的场景,web.xml 中少量几行固定模式的 Web 描述符就能满足需求
如果使用 Spring Tools for Eclipse,简单点击几下鼠标就能创建这些模板化的配置

下边的图片从高层展示了 Spring 是如何工作的
应用中定义的类型与配置元数据相结合
ApplicationContext 被创建并初始化之后,就得到了一个配置好的可执行的系统或应用

container-magic

1. 配置元数据(Configuration Metadata)

应用开发者通过 “ 配置元数据 ” 来告知 Spring IoC 容器如何实例化、配置、装配对象
“ 配置元数据 “ 的传统形式是 XML 文件
Spring 2.5 引入了基于注解的 ” 配置元数据 ”
Spring 3.0 引入了基于 Java 代码的 ” 配置元数据 ”

Spring IoC 容器和配置元数据的形式是完全解耦的

配置的 Bean 一般都是用来构成应用的对象,而非领域对象(即:功能结构对象,而非业务对象)
这些 Bean 一般包括:
服务层对象、数据访问对象(DAO)、表示层对象(如 Struts 的 Action)、基础设施对象(如 Hibernate 的 SessionFactories、JMS 的 Queues
一般不会将细粒度的领域对象配置为容器中的 Bean
因为创建和管理领域对象通常是数据访问对象(DAO)和业务逻辑的责任
但是可以使用 Spring 集成的 AspectJ 来配置那些 Spring IoC 容器范围外的对象
参考:Using AspectJ to dependency-inject domain objects with Spring

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
        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>
  1. 一个 <bean> 代表一个 Bean 定义,id 属性为 Bean 对象指定了唯一标识,可以用于在配置中引用某个 Bean 对象
  2. class 属性使用类型的完全限定名,指定了 Bean 的类型

2. 实例化一个容器

ApplicationContext 构造器参数传入的一个或多个路径指定了资源的位置
容器会根据这些资源位置,从各种不同的外部资源载入 “ 配置元数据 ”,例如本地文件系统、Java CLASSPATH 等等

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
    }

}

下边的例子展示了 Service 层对象的配置文件(services.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- services -->

    <bean id="petStore" class="spring.core.sample.app.service.impl.PetStoreServiceImpl">
        <property name="accountDao" ref="accountDao"/>
        <property name="itemDao" ref="itemDao"/>
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions for services go here -->

</beans>

上一篇:Spring Core /01 IoC 容器 / IoC 容器 和 Beans 介绍

样例代码:Spring Core Sample

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值