1.1什么是Spring

1.1什么是Spring

我知道你可能很想开始编写Spring应用程序,我向你保证,在本章结束之前,你将开发一个简单的应用程序。但是首先,我得介绍一些Spring的基本概念,以帮助你了解Spring的变化。

任何不平凡的应用程序都由许多组件组成,每个组件负责自己的在整体应用程序中的那部分功能,并与其他应用程序元素协调以完成工作。在运行应用程序时,需要以某种方式创建这些组件并相互引用。

Spring的核心是一个 容器,通常称为Spring应用程序上下文,用于创建和管理应用程序组件。这些组件(或bean)在Spring应用程序上下文中连接在一起以构成一个完整的应用程序,就像将砖、灰浆、木材、钉子、管道和电线绑在一起以组成房屋。

bean连接在一起的行为是基于一种称为 依赖注入(DI)的模式。依赖项注入的应用程序不是由组件自身创建和维护它们依赖的其他bean的生命周期,而是依赖于单独的实体(容器)来创建和维护所有组件,并将这些组件注入需要它们的bean。通常通过构造函数参数或属性访问器方法完成此操作。

例如,假设在应用程序的许多组件中,要处理两个组件:inventory service(用于获取库存级别)和product service(用于提供基本产品信息product service取决于inventory service,以便能够提供有关产品的完整信息。图1.1说明了这些beanSpring应用程序上下文之间的关系。

除了其核心容器之外,Spring和完整的相关库产品组合还提供Web框架、各种数据持久性选项、安全框架与其他系统的集成、运行时监视、微服务支持、响应式编程模型以及许多其他功能,应用于现代应用程序开发。

从历史上看,引导Spring应用程序上下文将bean连接在一起的方式是使用一个或多个XML文件,这些文件描述了组件及其与其他组件的关系。例如,以下XML声明两个bean,一个InventoryServicebean和一个ProductServicebean,然后通过构造函数参数将InventoryServicebean注入到 ProductService 中:

![1-1通过Spring上下文管理应用组件和注入](E:\Document\spring-in-action-v5-translate\第一部分Spring基础\第一章Spring入门\1-1通过Spring上下文管理应用组件和注入.png)

1-1通过Spring应用程序上下文管理应用程序组件并将它们相互注入

<bean id="inventoryService" class="com.example.InventoryService" />
<bean id="productService" class="com.example.ProductService" >
	<constructor-arg ref="inventoryService" />
</bean>

但是,在最新版本的Spring中,基于Java的配置更为常见。以下基于Java的配置类等效于XML配置:

@Configuration
public class ServiceConfiguration {
    @Bean
    public InventoryService inventoryService() {
        return new InventoryService();
    }

    @Bean
    public ProductService productService() {
        return new ProductService(inventoryService());
    }
}

@Configuration 注释向Spring表明这是一个配置类,它将为Spring应用程序上下文提供beans。 配置的类方法带有 @Bean 注释,指示它们返回的对象应作为beans添加到应用程序上下文中(默认情况下,它们各自的bean IDs将与定义它们的方法的名称相同

与基于XML的配置相比,基于Java的配置具有多个优点,包括更高的类型安全性和改进的可重构性。即使这样,仅当Spring无法自动配置组件时,才需要使用JavaXML进行显式配置。

自动配置起源于Spring技术,即 自动装配组件扫描。借助组件扫描,Spring可以自动从应用程序的类路径中发现组件,并将其创建为Spring应用程序上下文中的bean。通过自动装配,Spring会自动将组件与它们依赖的其他bean一起注入。

最近,随着Spring Boot的推出,自动配置的优势已经远远超出了组件扫描和自动装配。Spring BootSpring框架的扩展,它提供了多项生产力增强功能。这些增强功能中最著名的就是 自动配置,在这种配置中,Spring Boot可以根据类路径中的条目、环境变量和其他因素,合理地猜测需要配置哪些组件,并将它们连接在一起。

这里想要展示一些演示自动配置的示例代码,但是并没有这样的代码,自动配置就如同风一样,可以看到它的效果,但是没有代码可以展示。我可以说 “看!这是自动配置的示例” 事情发生、组件启用并且提供了功能,而无需编写代码。缺少代码是自动配置必不可少的要素,这使它如此出色。

Spring Boot自动配置大大减少了构建应用程序所需的显式配置(无论是XML还是Java)的数量。实际上,当完成本章中的示例时,将拥有一个正在运行的Spring应用程序,该应用程序仅包含一行Spring配置代码!

Spring Boot极大地增强了Spring开发的能力,很难想象没有它如何开发Spring应用程序。因此,本书将SpringSpring Boot视为一模一样。我们将尽可能使用Spring Boot,并仅在必要时使用显式配置。而且,由于Spring XML配置是使用Spring的老派方式,因此我们将主要关注基于JavaSpring配置。

但是有这些功能就足够了,本书的标题包括 实战 这个词语,因此让我们动起来,立马开始使用Spring编写第一个应用程序。

下一页