什么是Spring
- Spring的核心是提供了一个容器(container),通常称为Spring应用上下文(Spring application context),
他们会创建和管理应用组件。这些组件也可以称为bean,会在Spring应用上下文中装配在一起,从而形成一个完整的应用程序。 - 将bean装配在一起的行为是通过一种基于依赖注入(dependency injextion DI)的模式实现的。
此时,组件不会再去创建它所依赖的组件并管理他们的生命周期,使用依赖注入的应用依赖于单独的实体(容器)来创建和维护所有的组件,
并将其注入到需要它们的bean中,通常,这是通过构造器参数和属性访问来实现的。
指导Spring应用上下文将bean装配在一起的方式中,基于Java的配置较为常见,也有基于XML配置的。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,表明了这些方法所返回的对象会以bean的形式添加到Spring的应用上下文中
(默认情况下,这些bean所对应的BeanID与定义他们的方法名称是相同的)。
在Spring技术中,自动装配起源于所谓的自动装配(autowiring)和组件扫描(component scanning)。
借助组件扫描技术,Spring能够自动发现应用类路径下的组件,并将他们创建成Spring应用上下文中的Bean。
借助自动装配技术,Spring能够自动为组件注入他们所依赖的其他Bean。
随着Spring Boot的引入,自动装配的能力已经远远超出组件扫描和自动装配。Spring Boot是Spring框架的拓展,
提供了很多增强生产效率的方法。最为大家所熟知的增强方法就是自动配置(autoconfiguration),Spring Boot能够基于类路径中的条目,环境变量和其他因素合理猜测需要配置的组件并将它们装配在一起。
Spring 应用
Spring项目的结构
-
mvnw和mvnw.cmd:这是Mavan包装器(wrapper)脚本。借助这些脚本,即使你的机器上没有安装Maven,也可以构建项目。
-
pom.xml: 这是Maven构建规范。
-
application.properties: 这个文件起初是空的,但是它为我们提供了指定配置属性的地方。
-
static:在这个文件夹下,你可以存放任意为浏览器提供服务的静态内容,该文件夹初始为空。
-
templas:这个文件夹中存放用来渲染内容到浏览器的模板文件,该文件夹初始为空。
-
xxApplicationTests.java: 这是一个简单的测试类,它能确保Spring应用上下文可以成功加载。
引导应用
因为我们会通过可执行JAR文件的形式来运行应用,所以很重要的一点就是要有一个主类。它会在JAR运行的时候被执行。同时我们还需要一个最小化的Spring配置,以引导该应用。这就是xxApplication类所做的事,如下所示
@SpringBootApplication
public class xxApplication {
public static void main (String[] args) {
SpringApplication.run(xxApplication.class,args);
}
}
@SpringBootApplication注解表明这是一个SpringBoot应用,它是一个组合注解,结合了其他三个注解
- @SpringBootConfiguration: 将该类声明为配置类。这个注解实际上是@Configuration注解的特殊形式。
- @EnableAutoConfiguration:启用Spring Boot的自动配置。
- @ComponentScan:启用组件扫描。这样我们就能够通过像@Component,@Controller,@Service这样的注解生命其他类,Spring会自动发现它们并将它们注册为Spring应用上下文中的组件。