Starter的工作原理:
1、Spring Boot在启动时扫描项目所依赖的jar包,寻找包含spring.factories文件的jar包。
2、读取spring.factories文件获取配置的自动配置类XXXAutoConfiguration。
3、将自动配置类下满足条件(@ConditionalOnXxx)的Bean加入到IOC容器中
编写pom.xml文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.seasy</groupId> <artifactId>seasy-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.7.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> </dependencies> </project>
创建核心服务类:
public class SeasyService { private SeasyProperties seasyProperties; public SeasyService(SeasyProperties seasyProperties){ this.seasyProperties = seasyProperties; } public String login(){ System.out.println("username=" + seasyProperties.getUsername() + ", password=" + seasyProperties.getPassword()); return "success"; } }
创建配置类:
/** * 配置类 * 只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean。 * 可以使用@Component来标注,也可以使@EnableConfigurationProperties(SeasyProperties.class)启用指定的属性类 * * 属性名对应到application.properties文件的参数,比如seasy.login.username */ @ConfigurationProperties("seasy.login") //参数前缀 public class SeasyProperties { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
创建自动配置类:
@Configuration //使配置类生效:将配置文件中对应的值和配置类绑定起来,并把配置类加入到IOC容器中 @EnableConfigurationProperties(SeasyProperties.class) //存在SeasyService类自动配置才生效 @ConditionalOnClass(SeasyService.class) //只有配置了属性seasy.login.enabled=true,才加载和自动配置 @ConditionalOnProperty(prefix="seasy.login", value="enabled", havingValue="true") //必须设置为true //@ConditionalOnProperty(prefix="seasy.login", value="enabled", matchIfMissing=true) //没有设置则默认为true public class SeasyAutoConfiguration { @Autowired private SeasyProperties seasyProperties; @Bean //Spring容器不存在该Bean时才实例Bean @ConditionalOnMissingBean public SeasyService getSeasyService(){ return new SeasyService(seasyProperties); } }
在 src\main\resources\META-INF 目录下新建spring.factories文件,添加内容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.seasy.SeasyAutoConfiguration
执行 mvn clean install 命令编译打包工程到本地maven仓库中。
测试:
在测试工程引入依赖包:
<dependency> <groupId>com.seasy</groupId> <artifactId>seasy-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
在application.properties文件添加配置信息:
seasy.login.enabled=true seasy.login.username=dev seasy.login.password=123
在Controller类引用服务类,并调用提供的方法:
@Autowired private SeasyService seasyService; @RequestMapping("/index") public String index(){ String result = seasyService.login(); System.out.println(result); return "index"; }
相关推荐
SpringBoot 自定义 Starter 实例代码 SpringBoot 自定义 Starter 实例代码是指通过自定义 Starter 来简化 SpringBoot 的使用。SpringBoot 的强大功能之一是 把常用的场景抽取成了一个个 Starter(场景启动器),...
最后,自定义Starter的目的是为了提高代码的复用性和可维护性。当你有一个通用的功能或一组组件,希望在多个Spring Boot项目中使用时,创建一个Starter是一个明智的选择。通过遵循Spring Boot的设计原则和最佳实践,...
SpringBoot自定义Starter的具体流程 SpringBoot自定义Starter是一种特殊的starter,它可以根据项目的需求进行自定义和配置,从而满足不同的业务需求。在 본节中,我们将详细介绍SpringBoot自定义Starter的具体流程...
自定义完整的starter*demo,包含了import所有用法,selector,register,bean,class以及常规的scan用法
在Spring Boot框架中,自定义Starter是一种非常实用的技术,它允许开发者创建可重用的模块,以便在多个项目间快速引入和配置依赖。通过创建自定义Starter,我们可以简化项目构建过程,提高代码的可维护性和一致性。...
Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-...
这个压缩包文件 "SpringBoot启动配置原理_SpringBoot自定义starters.zip" 显然是关于理解 Spring Boot 启动配置以及如何自定义 Starters 的教程资料。 **Spring Boot 启动配置原理** Spring Boot 的核心之一是其...
总结,本项目【study-springboot】是一个实践案例,展示了如何在Spring Boot项目中使用自定义Starter组件。这不仅简化了配置,提高了代码的可复用性,同时也使得项目的构建和维护变得更加高效。通过分析项目文件和...
2. **命名规范**:自定义Starter的Maven模块名通常以`spring-boot-starter-`开头,如`spring-boot-starter-myapp`。 3. **`spring.factories`**:在Starter的`META-INF/spring.factories`文件中添加`org.spring...
在Spring Boot生态系统中,自定义Starter是一种强大的方式来封装和重用代码,使得其他开发者可以轻松地在他们的项目中引入特定的功能。本篇文章将详细解析如何创建一个自定义的Spring Boot Starter,以及在这个过程...
通过创建自定义Starter,我们可以将常见的配置、依赖和初始化逻辑打包,使得在新项目中使用这些功能时,只需添加一个Maven或Gradle依赖即可。 在创建自定义Starter时,通常包括以下几个关键步骤: 1. **定义Maven...
在自定义的`cwp-spring-boot-starter`项目中,我们可以深入理解SpringBoot Starter的工作原理以及如何根据需求构建自己的Starter。 首先,`cwp-spring-boot-starter`这个名字暗示这是一款定制的SpringBoot启动器,...
Spring Boot的自定义starter是开发人员扩展其功能和定制化应用的一种强大方式。本文将详细介绍创建自定义starter的完整步骤,以及如何利用starter模块来优化项目配置。 首先,理解starter的作用至关重要。starter是...
这样,当项目引入自定义starter后,Spring Boot会自动加载这些配置,简化项目的配置工作。 3. **源码分析**: 压缩包中的源码部分可能包含以下内容: - 自定义配置类:这些类通常带有`@Configuration`注解,用于...
自定义springboot starter
Spring Boot 默认提供了强大的Web支持,而`request-springboot-starter`进一步加强了这一能力。它可能包括但不限于以下功能: - 自动转换请求参数:自动将请求体中的JSON数据映射到Java对象。 - 响应结果封装:...
理解并掌握自定义starter的创建过程,将有助于我们更好地利用Spring Boot的优势,实现高效开发。 首先,我们需要了解Spring Boot starter的基本结构。一个starter通常包含以下几部分: 1. **pom.xml**:这是项目的...
为了简化开发过程,开发者经常创建自定义的Spring Boot Starter,以便于复用和快速集成特定功能。本项目"email-spring-boot-starter"就是一个这样的例子,它提供了一个方便的邮件发送服务,能够直接与126、QQ等主流...