Spring实战(第五版)学习笔记——第一章 Spring起步
软件开发的真谛——唯一不变的就是变化。
Spring通过引入SpringBoot简化自己的开发模型。
1 什么是Spring
任何实际的应用程序都是由很多组件组成的,每个组件负责整个应用功能的一部分,这些组件需要与其他的应用
元素进行协调已完成自己的任务。当应用程序运行时,需要以某种方式创建并引入这些组件。
Spring的核心是提供了一个容器(container),通常称为Spring引用上下文(Spring application context),
它们会创建和管理应用组件。这些组件也可以称之为bean,会在Spring应用上下文中和装配在一起,从而形成一个完
整的应用程序。
将bean装配在一起的行为是通过一种基于依赖注入(dependency injection,DI)的模式实现的。此时,组件不
会再去创建它所依赖的组件并管理它们的生命周期,使用依赖注入的应用依赖于单独的实体(容器)来创建和维护所有
的组件,并将其注入到需要它们的bean中。通常,这是通过构造器参数和属性访问方法来实现的。
在核心容器上,Spring及其一系列的相关库提供了Web框架、各种持久化可选方案、安全框架、与其他系统集成、
运行时监控、微服务支持、反应式编程以及众多现代应用开发所需的特性。
在历史上,指导Spring应用上下文将bean装配在一起的方式是使用一个或多个XML文件(描述各个组件以及它们
与其他组件的关联关系)。
例:
<bean id="inventoryService" class="com.example.InventoryService" />
<bean id="productService" class="com.example.ProductService">
<constructor-arg ref="inventoryService"/>
</bean>
在最近的Spring版本中,集于Java的配置更为常见。
例:
@Configuration
public class ServiceConfiguration {
@Bean
public InventoryService inventoryService{
return new InventoryService();
}
@Bean
public ProductService productService{
return new ProductService(inventoryService());
}
}
@Configuration注解会告知Spring这是一个配置类,会为Spring应用上下文提供bean。这个配置类的方法
使用@Bean注解进行了标注,表明这些方法所返回的对象会以bean的形式添加到Spring的应用上下文中(默认情况
下,这些bean所对应的bean ID与定义它们的方法名称是相同的)。
想对于基于XML的配置方式,基于Java的配置会带来多项额外的收益,包括更强的类安全性以及更好的重构能
力。即便如此,不管是使用Java还是使用XML的显式配置,只有当Spring不能进行自动配置的时候才是必要的。
在Spring技术中,自动配置起源于所谓的自动装配(autowiring)和组件扫描(component scanning)。借助
组件扫描技术,Spring能够自动发现应用类路径下的组件,并将它们创建成Spring应用上下文中的bean。借助自
动装配技术,Spring能够自动为组件注入它们所依赖的其他bean。
但是,随着Spring Boot的引入,自动配置的能力已经远远超出了组件扫描和自动装配。Spring Boot是Spring
框架的扩展,提供了很多增强生产效率的方法。最为大家所熟知的增强方法就是自动配置(autoconfiguration),
Spring Boot能够基于类路径中的条目、环境变量和其他因素合理猜测需要配置的组件并将它们装配在一起。
Spring Boot大幅度减少了构建应用所需的显式配置的数量。
本书会将Spring和Spring Boot当成一回事。
2 初始化Spring应用
2.1 使用Spring Tool Suite初始化Spring项目
2.2 检查Spring项目的结构
·mvnw和mvnw.cmd:Maven包装器(wrapper)脚本。借助这些脚本,即使你的机器上没有安装Maven,也可以构建项目。
·pom.xml:Maven构建规范。
·TestApplication.java:SpringBoot的主类,用以启动项目。
·application.properties:指定配置属性,一开始是空的。
·static:存放为浏览器服务的静态内容(图片、样式表、JavaScript等等)。初始为空。
·templates:存放用来渲染内容到浏览器的模板文件。初始为空。
·TestApplicationTests.java:简单的测试类。确保Spring应用上下文可以成功加载。
2.2.1 探索构建规范 pom.xml
<dependency