Spring5.3.9框架文档之二: 核心

这部分参考文档覆盖了所有Spring框架必须的技术.
在这些技术中, 最重要的是Spring IoC容器. 关于IoC容器的彻底理解, Spring AOP(切面编程)有着基于此的完全覆盖. Spring本身有着自己的AOP实现, 概念上很容易理解, 而且几乎很好地满足了(80%)在企业应用编程中的AOP需求.
同时Spring也集成了AspectJ(当前最丰富, 也是最原生的AOP Java领域的框架).

1. IoC容器

1.1. Spring IoC容器与Beans的简介
本章节是关于Spring IoC实现的原则. IoC也叫做DI, 依赖注入(DI, Dependency Injection). 在这个过程中, 在对象实例通过工厂方法构造与返回之后, 该对象的依赖(该对象工作时候的其他对象)仅仅通过构造器参数, 工厂方法的参数, 或者对象实例的属性配置文件进行定义, 之后容器会将所定义的依赖注入到该对象中. 这个过程基本上颠倒了(Inverse)对象的实例化控制, 或者说颠倒了依赖对象的位置(通过使用直接的类构造或者服务定位器模式的机制).
[org.springframework.beans, org.springframework.context]这两个工具包是IoC容器的主要实现. BeanFactory接口提供了进一步的配置机制来管理对象类型. ApplicationContext是其子接口, 在BeanFactory基础上添加了:

  • 更简化的Spring AOP特性集成
  • 通信资源的处理(内化了该功能)
  • 事件发布
  • 应用层面的具体实现(如WebApplicationContext网站应用)

简单来说, BeanFactory提供了配置方式的实现和一些基本的功能, 且ApplicationContext添加了更加企业应用化的功能. ApplicationContext是基于BeanFactory且更完整的接口集合, 在本章节中将专门使用它进行Spring IoC容器的讲解和描述. 如果想了解BeanFactory, 可以在另外的章节寻找相关信息.
在Spring中, 你应用基础的主要对象应该主要通过IoC容器进行管理, 这些对象也被称为Bean, Bean是一个实例化, 装载和管理都通过IoC容器实现的对象. 更一般来看, Bean就是应用中众多对象中的一部分. 通常Bean通过配置元数据的方式从而纳入到容器管理范围.

1.2.Container Overview
接口 org.springframework.context.ApplicationContext 是Spring IoC容器的代表, 职责包括生成实例, 加载配置以及装载beans. 这个容器通过读取元数据配置信息来说明了什么样的对象会被实例化, 配置或者装载. 元数据信息通过XML, Java注解或者Java代码进行配置. 它让你能够配置好组成你应用的对象, 以及对象间丰富的内部依赖关系.
Spring提供了ApplicationContext的几种实现. 在单机应用中, ClassPathXmlApplication或者FileSystemXmlApplication是比较常用的. XML是定义元数据配置的一种传统的格式, 另外你可以通过Java注解或者代码来配置容器, 这样就仅需要少许XML配置来声明对其他元数据格式的支持.
在大多数应用场景中, IoC容器使得我们不需要清晰的用户代码来实例化对象. 比如在网站应用中, 大概只需要在web.xml添加大概8行可公用的描述就足够了. 如果你使用Eclipse, 你只需要通过轻轻敲击几下鼠标或键盘就能很容易生成这些公共的配置.
下面图一, 展示了Spring的工作机制. 你应用的类跟配置元数据绑定了, 因此当ApplicationContext生成和初始化后, 你的应用就能够运行了.
图一 Spring工作机制:IoC容器
1.2.1.配置元数据
正如之前图一所展示的, Spring IoC容器会获取某种形式的配置元数据. 这些元数据代表了开发者在应用中需要Spring容器怎么样去实例化. 配置和装载对象.
元数据的配置一般是通过简单和易于理解的XML格式进行, 这也是本章最常用的形式来说明一些IoC容器的关键概念与特征.

XML元数据配置并不是唯一的方式. 其实Spring容器和配置的格式是低耦合的. 当前很多开发者会选择基于Java注解的配置方式

Spring配置由至少一个bean组成. XML方式通过中的元素来配置一个bean. Java方式则通过在类声明@Configura和在方法中声明@Bean来配置.

这些Bean的定义对应着组成你应用的对象. 一般来说, 你在应用中会定义服务层对象, 数据层对象, 展示层对象(比如Structs框架中的action实例), 底层对象(例如Hibernate SessionFactories, JMS Queues等). 如果一个对象在容器中没有进行一些细粒度的配置, 一般是因为它负责数据层或者业务层中生成与加载具体的对象. 然而你可以使用Spring集成的AspectJ去配置在Spring容器之外生成的对象.

1.2.2.容器实例化
ApplicationContext构造方法中需要路径指向配置好的元数据文件, 包括本地文件, Java类路径等.

ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

在你初步接触Spring容器实例化后, 你可能想了解更多, 你可以参考Spring读取源文件的抽象化类Resouce, 该类是一种方便的机制去读取不同位置的输入流.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值