认识spring-boot-starter
Spring Boot Starter是一种特定类型的依赖项,它能够简化和加速Spring Boot应用程序的配置和集成过程。它提供了一组预配置的依赖项和自动化配置,使得开发者能够快速集成各种功能和第三方库,而无需手动进行繁琐的配置。
一个Spring Boot Starter通常由以下几个部分组成:
- 自动配置:Starter包含了一组自动配置类,这些类会根据环境和依赖的存在自动配置应用程序所需的各种组件、服务和功能。
- 依赖管理:Starter会管理应用程序所需的所有依赖项,包括Spring Boot核心依赖和相关的第三方库。通过引入适当的Starter,可以确保所有需要的依赖项都能正确加载。
- 配置属性:Starter提供了一组预定义的配置属性,开发者可以通过设置这些属性来自定义应用程序的行为。这些配置属性通常是通过
application.properties或application.yml文件进行配置。
使用Spring Boot Starter的好处包括:
- 简化配置:Starter自动配置了各种组件和功能,无需手动编写大量的配置代码,可以快速启动一个工作的应用程序。
- 快速集成:Starter提供了对各种第三方库和框架的集成支持,通过引入相应的Starter,可以快速集成所需的功能。
- 标准化依赖管理:Starter统一管理依赖项,避免了版本冲突和依赖关系管理的烦恼。
- 可扩展性和灵活性:Starter允许开发者自定义配置属性,根据具体需求进行自定义扩展,以适应不同的业务场景。
常见的Spring Boot Starter有很多,例如spring-boot-starter-web用于构建Web应用程序,spring-boot-starter-data-jpa用于集成JPA数据访问等。你可以根据具体业务需求选择并引入相应的Starter,以简化开发过程并提高效率。
实现自己的spring-boot-starter
一、具体实现步骤
要实现自己的Spring Boot Starter,可以按照以下步骤进行:
步骤1:创建一个新的Maven或Gradle项目。可以选择使用Spring Initializr来快速生成项目结构和依赖。
步骤2:在项目中创建自定义的Starter模块,通常以spring-boot-starter-开头命名。该模块将作为自定义Starter的核心部分。
步骤3:定义自定义Starter的自动配置类。在Starter模块中创建一个或多个自动配置类,用于配置和初始化所需要的组件、服务或功能。自动配置类通常使用@Configuration和@ConditionalOnClass、@ConditionalOnProperty等条件注解来控制配置的生效条件。
步骤4:提供自定义Starter的配置属性。在Starter模块中创建一个properties或yaml文件,定义Starter所需的配置属性。可以使用@ConfigurationProperties注解将属性绑定到对应的配置类上,并提供默认值和注释说明。
步骤5:编写示例代码和配置。在Starter模块的src/main/resources目录下,创建示例配置文件(如application.properties或application.yml),并添加必要的配置项。
步骤6:打包和发布Starter模块。使用Maven或Gradle将自定义Starter模块打包,并发布到本地或私有仓库。
步骤7:创建一个新的Spring Boot应用程序项目,然后在项目中引入自定义的Starter依赖。
步骤8:启动应用程序并验证自定义Starter的功能是否生效。
二、Demo示例演示
- 创建新的Maven项目,并在pom.xml中添加以下依赖:
xmlCopy Code
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
- 创建名为
spring-boot-starter-demo的模块,并在该模块中创建src/main/java目录结构。 - 在
src/main/java目录下创建一个自动配置类DemoAutoConfiguration.java,示例如下:
@Configuration
@EnableConfigurationProperties(DemoProperties.class)
public class DemoAutoConfiguration {
private final DemoProperties properties;
public DemoAutoConfiguration(DemoProperties properties) {
this.properties = properties;
}
@Bean
public DemoService demoService() {
return new DemoService(properties.getMessage());
}
}
- 在
src/main/java目录下创建一个配置属性类DemoProperties.java,示例如下:
@ConfigurationProperties(prefix = "demo")
public class DemoProperties {
private String message = "Hello, World!";
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
- 在
src/main/resources目录下创建一个名为application.properties的示例配置文件,并添加以下内容:
demo.message=Hello from custom starter!
- 打包和发布Starter模块:
$ mvn clean install
- 创建一个新的Spring Boot应用程序,并在pom.xml中引入自定义Starter依赖:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>spring-boot-starter-demo</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
- 在应用程序的代码中使用自定义Starter中的功能,示例如下:
@RestController
public class DemoController {
private final DemoService demoService;
public DemoController(DemoService demoService) {
this.demoService = demoService;
}
@GetMapping("/hello")
public String hello() {
return demoService.getMessage();
}
}
- 启动应用程序,并访问
http://localhost:8080/hello,应该能够看到返回的消息为"Hello from custom starter!"。
三、项目结构等
1、项目结构
2、FetchCodeServiceAutoConfiguration
认识:
这段代码是一个自动配置类,用于将
FetchCodeService实例化并注入到Spring IoC容器中。
首先,使用@Configuration注解将这个类标记为配置类,告诉Spring容器需要从这个类中加载配置。
接着,使用@EnableConfigurationProperties(FetchCodeProperties.class)注解启用对FetchCodeProperties配置属性类的支持,使得可以将配置属性注入到这个自动配置类中。
接下来,通过构造方法注入FetchCodeProperties对象,并将其赋值给类中的fetchCodeProperties变量。这样做是为了获取外部配置文件中的属性值。
然后,在@Bean注解的方法中,使用@ConditionalOnMissingBean注解表示仅当容器中不存在FetchCodeService类型的Bean时才会执行这个方法。这样做可以避免重复创建Bean。
在这个方法中,根据FetchCodeProperties对象的属性值,调用FetchCodeService的构造方法创建一个实例,并将其返回。
最终,Spring容器会自动将FetchCodeService添加到IoC容器中,供其他组件使用。
总结:这段代码是一个自动配置类,它根据外部配置文件中FetchCodeProperties类的属性值,实例化并注入了一个FetchCodeService对象到Spring IoC容器中,以供其他组件使用。
/**
* 配置类,基于Java代码的bean配置
*/
@Configuration
@EnableConfigurationProperties(FetchCodeProperties.class)
public class FetchCodeServiceAutoConfiguration {
private FetchCodeProperties fetchCodeProperties;
//通过构造方法注入配置属性对象HelloProperties
public FetchCodeServiceAutoConfiguration(FetchCodeProperties fetchCodeProperties) {
this.fetchCodeProperties = fetchCodeProperties;
}
//实例化HelloService并载入Spring IoC容器
@Bean
@ConditionalOnMissingBean
public FetchCodeService fetchCodeService(){
return new FetchCodeService(fetchCodeProperties.getAppId(), fetchCodeProperties.getAppSecret(), fetchCodeProperties.getUrl(), fetchCodeProperties.getExpiration(), fetchCodeProperties.getSecretkey());
}
}
3、认识src/main/resources/META-INF/spring.factories
这段代码是一个配置文件,通常命名为spring.factories,用于指定自动配置类的类名。
在Spring Boot中,使用@EnableAutoConfiguration注解可以自动启用和加载一组预定义的自动配置类。这些自动配置类负责根据应用程序的依赖和配置信息,自动配置和装配各种组件和功能。
在这个配置文件中,org.springframework.boot.autoconfigure.EnableAutoConfiguration是键,表示需要自动启用和加载自动配置类。
com.hmall.config.FetchCodeServiceAutoConfiguration是对应的值,即自动配置类FetchCodeServiceAutoConfiguration的完全限定类名。
通过将自动配置类的类名添加到spring.factories文件中,可以告诉Spring Boot在启动时自动加载该自动配置类,并进行相应的配置和初始化操作。
总结:这段代码是一个配置文件,指定了要自动启用和加载的自动配置类FetchCodeServiceAutoConfiguration。在应用程序启动时,Spring Boot会自动识别并加载该类,完成相应的配置和初始化操作。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hmall.config.FetchCodeServiceAutoConfiguration