这一章主要讲了三部分内容
有过开发经验的同学都应该清楚随着软件开发的不断发展,Spring框架也在不断的变化着,其中就包括微服务和反应式编程。Spring还通过引入Spring Boot简化自己的开发模式。
不管你是开发以数据库作为支撑的简单Web应用,还是围绕微服务构建一个现代应用,Spring框架都能帮助你达成目标。本章是使用Spring进行现代应用开发的第一步
1.1 什么是Spring
Spring的核心是提供了一个容器 (Container),通常称为Spring应用的上下文(Spring application context),它们会创建和管理应用组件。这些组件也可以称为bean,会在Spring应用上下文中装配在一起,从而形成一个完整的应用程序。这就像砖块、砂浆、木材、管道和电线组合在一起,形成一栋房子似的。我们在第4版中可知道我们的应用对象是生存于Spring容器中的。
将bean装配在一起的行为是通过一种基于依赖注入(dependency injection,DI)的模式实现的。此时,组件不会再去创建它所依赖的组件并管理它们的生命周期,使用依赖注入的应用依赖于单独的实体(容器)来创建和维护所有的组件,并将其注入到需要它们的bean中。通常,这是通过构造器参数和属性访问方法来实现的。
举例来说,假设在应用的众多组件中,有两个是我们需要处理的:库存服务(用来获取库存水平)和商品服务(用来提供基本的商品信息)。商品服务需要依赖于库存服务,这样它才能提供商品的完整信息。图1.1阐述这些bean和Spring应用上下文之间的关系。
图1.1 应用组件通过Spring的应用上下文来进行管理并实现互相注入
在核心容器之上,Spring及其一系列的相关库提供了Web框架、各种持久化可选方案、安全框架、与其他系统集成、运行时监控、微服务支持、反应式编程以及众多现代应用开发所需的特性。
讲bean注入到Sprng 容器中可以使用xml文件也可以通过Java配置
方式一:xml文件
该xml文件中描述了两个Bean,CmsSubjectServiceImpl和OmsOrderServiceImpl,并且通过构造器参数将CmsSubjectServiceImpl装配到OmsOrderServiceImpl中。
方式二:Java配置
package com.macro.mall.common;
import com.macro.mall.service.impl.CmsSubjectServiceImpl;
import com.macro.mall.service.impl.OmsOrderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean
public CmsSubjectServiceImpl cmsSubjectService(){
return new CmsSubjectServiceImpl();
}
@Bean
public OmsOrderServiceImpl omsOrderService(){
return new OmsOrderServiceImpl(cmsSubjectService());
}
}
其中用的注解
@Configuration注解会告知Spring这是一个配置类,会为Spring应用上下文提供bean。这个配置类的方法使用@Bean注解进行了标注,表明这些方法所返回的对象会以bean的形式添加到Spring的应用上下文中(默认情况下,这些bean所对应的bean ID与定义它们的方法名称是相同的)。
相对于基于XML的配置方式,基于Java的配置会带来多项额外的收益,包括更强的类型安全性以及更好的重构能力。即便如此,不管是使用Java还是使用XML的显式配置,只有当Spring不能进行自动配置的时候才是必要的。
在Spring技术中,自动配置起源于所谓的自动装配(autowiring)和组件扫描(componentscanning)。借助组件扫描技术,Spring能够自动发现应用类路径下的组件,并将它们创建成Spring应用上下文中的bean。借助自动装配技术,Spring能够自动为组件注入它们所依赖的其他bean。
最近,随着Spring Boot的引入,自动配置的能力已经远远超出了组件扫描和自动装配。SpringBoot是Spring框架的扩展,提供了很多增强生产效率的方法。最为大家所熟知的增强方法就是自动配置(autoconfiguration),Spring Boot能够基于类路径中的条目、环境变量和其他因素合理猜测需要配置的组件并将它们装配在一起。
1.2 初始化Spring应用
第五版中使用的是Spring Initializr初始化应用,我直接使用idea来创建的Spring Boot项目
1、创建一个maven项目
2.添加pom文件
4.0.0
SpringBootTest
TestDemo
1.0-SNAPSHOT
jar
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
UTF-8
UTF-8
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
org.springframework.boot
spring-boot-starter-test
org.seleniumhq.selenium
htmlunit-driver
test
org.springframework.boot
spring-boot-maven-plugin
3.创建应用运行类
@SpringBootApplication注解明确表明这是一个Spring Boot应用。但是,@SpringBootApplication远比看上去更强大。@SpringBootApplication是一个组合注解,它组合了3个其他的注解
4。创建一个测试类
@SpringBootTest会告诉JUnit在启动测试的时候要添加上Spring Boot的功能。