跳至主要內容
Spring Framework 概述

Spring Framework 简介

Spring是一个开源、轻量级、依赖注入(DI)容器和框架,用于构建Java企业应用程序。


会敲代码的程序猿原创大约 2 分钟SpringSpring Framework
Bean定义继承

一个Bean定义可以包含大量的配置信息,包括构造函数参数、属性值以及容器特定的信息,比如初始化方法、静态工厂方法名称等等。 一个子Bean定义会从父定义中继承配置数据。子定义可以根据需要覆盖一些值或添加其他值。 使用父子Bean定义可以节省大量的输入工作。实际上,这是一种模板化的形式。

如果你以编程方式使用ApplicationContext接口,子Bean定义由ChildBeanDefinition类表示。 大多数用户不会在这个层面上直接操作它们。相反,他们会在诸如ClassPathXmlApplicationContext之类的类中以声明性方式配置Bean定义。 当你使用基于XML的配置元数据时,可以通过使用parent属性指定父Bean来表示子Bean定义,将父Bean作为此属性的值。以下示例展示了如何这样做:


会敲代码的程序猿原创大约 3 分钟SpringSpring Framework
Bean作用域(Scope)

当你创建一个Bean定义时,实际上是在创建Bean定义所定义类的实际实例的配方。 将Bean定义视为“配方”的概念非常重要,因为它意味着,就像一个类一样,你可以从一个单一的“配方”中创建多个对象实例。

你不仅可以控制Bean定义中的各种依赖项和配置值,还可以控制由Bean定义创建的对象的作用域(scope)。 这种方法是强大且灵活的,因为你可以通过配置选择创建的对象的作用域,而不必在Java类级别上固定对象的作用域。 Bean定义可以是多种作用域之一。Spring框架支持六种作用域,其中四种仅在使用Web感知(aware)的ApplicationContext时才可用。 你还可以创建自定义作用域


会敲代码的程序猿原创大约 16 分钟SpringSpring Framework
依赖(Dependencies)

企业应用程序通常不是由单个对象(或Spring术语中的Bean)构成的。 即使是最简单的应用程序,也是由多个对象共同协作来呈现给最终用户一个连贯的应用体验。

下一节将解释如何从定义独立的Bean开始,逐步实现一个完整的应用程序。 在这个应用程序中,各个对象将相互协作,实现一个共同的目标。

章节摘要


会敲代码的程序猿原创小于 1 分钟SpringSpring Framework
自动装配协作者

Spring容器可以自动装配协作Bean之间的关系。 你可以通过检查ApplicationContext的内容,让Spring自动为你的Bean解析协作对象(其他Bean)。

自动装配的优势

  • 减少手动配置:自动装配可以显著减少对手动指定属性或构造方法参数的需求。 其他机制 ,如bean模板,在这方面也是非常有价值的。
  • 动态更新配置:随着项目的发展,对象可能会增加新的依赖。自动装配能够适应这种变化,自动满足新的依赖关系,而无需手动更新配置。 这一点在项目的迭代开发过程中尤为有用。同时,当项目稳定下来后,开发者仍然可以选择切换到显式装配,以获得更精确的控制。

会敲代码的程序猿原创大约 5 分钟SpringSpring Framework
依赖注入

依赖注入(DI)是什么?

Spring IoC(控制反转)也被称为依赖注入(DI)

它是一个过程,对象仅通过构造参数、工厂方法参数或在对象实例被构造函数或工厂方法返回后,在其上设置的属性来定义它们的依赖关系。 在IoC容器创建Bean时,它会自动注入这些依赖项。 不再需要通直接构造依赖项或使用服务定位器模式等方式来管理对象的实例化或位置, 而是交由IoC容器来管理,因此称为控制反转

DI解耦


会敲代码的程序猿原创大约 12 分钟SpringSpring Framework
使用depends-on

如果一个Bean是另一个Bean的依赖项,这意味着一个Bean被设置为另一个Bean的属性。 可以通过<ref/>元素 来实现这一点。 然而,有时Bean之间的依赖关系并不那么直接。

举个例子:当一个类中的静态初始化器需要被触发时,比如数据库驱动程序的注册。 depends-on属性可以强制容器在初始化beanOne Bean之前先初始化指定的manager Bean。 以下示例使用depends-on属性来表达对单个Bean的依赖:


会敲代码的程序猿原创大约 1 分钟SpringSpring Framework
懒加载(Lazy Initialization)Bean

在Spring框架中,ApplicationContext的默认行为是在启动过程中立即创建并配置所有的单例Bean。 这种做法有利于及时发现配置错误或环境问题,避免了错误在应用运行一段时间后才暴露。 然而,如果需要改变这一行为,可以通过设置Bean定义为懒加载(lazy-initialized)来实现。 这样一来,Bean的实例化将被推迟到第一次实际请求该Bean时进行,而不是在应用启动时完成,从而提供了更大的灵活性和控制。

在XML中,通过<bean/>元素上的lazy-init属性来控制这种行为,如下例所示:


会敲代码的程序猿原创大约 1 分钟SpringSpring Framework
方法注入

大多数应用场景中,容器中的大多数Bean都是单例(singleton) 的。 当一个单例(singleton)Bean需要与原型(prototype)Bean协作时,传统的注入方式可能不再适用。 这是因为单例Bean在整个应用生命周期内只创建一次,而原型Bean每次请求时都会创建一个新的实例。


会敲代码的程序猿原创大约 1 分钟SpringSpring Framework