`
raymond.chen
  • 浏览: 1437294 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Springboot自定义Starter

 
阅读更多

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 实例代码 SpringBoot 自定义 Starter 实例代码是指通过自定义 Starter 来简化 SpringBoot 的使用。SpringBoot 的强大功能之一是 把常用的场景抽取成了一个个 Starter(场景启动器),...

    SpringBoot自定义starter入门

    最后,自定义Starter的目的是为了提高代码的复用性和可维护性。当你有一个通用的功能或一组组件,希望在多个Spring Boot项目中使用时,创建一个Starter是一个明智的选择。通过遵循Spring Boot的设计原则和最佳实践,...

    springboot自定义Starter的具体流程

    SpringBoot自定义Starter的具体流程 SpringBoot自定义Starter是一种特殊的starter,它可以根据项目的需求进行自定义和配置,从而满足不同的业务需求。在 본节中,我们将详细介绍SpringBoot自定义Starter的具体流程...

    spring-boot自定义starter的demo

    自定义完整的starter*demo,包含了import所有用法,selector,register,bean,class以及常规的scan用法

    springboot自定义starter

    在Spring Boot框架中,自定义Starter是一种非常实用的技术,它允许开发者创建可重用的模块,以便在多个项目间快速引入和配置依赖。通过创建自定义Starter,我们可以简化项目构建过程,提高代码的可维护性和一致性。...

    Java开发案例-springboot-66-自定义starter-源代码+文档.rar

    Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-自定义starter-源代码+文档.rar Java开发案例-springboot-66-...

    SpringBoot启动配置原理_SpringBoot自定义starters.zip

    这个压缩包文件 "SpringBoot启动配置原理_SpringBoot自定义starters.zip" 显然是关于理解 Spring Boot 启动配置以及如何自定义 Starters 的教程资料。 **Spring Boot 启动配置原理** Spring Boot 的核心之一是其...

    使用了自定义springboot-starter组件的示例项目【study-springboot】

    总结,本项目【study-springboot】是一个实践案例,展示了如何在Spring Boot项目中使用自定义Starter组件。这不仅简化了配置,提高了代码的可复用性,同时也使得项目的构建和维护变得更加高效。通过分析项目文件和...

    springboot自定义自动装配.rar

    2. **命名规范**:自定义Starter的Maven模块名通常以`spring-boot-starter-`开头,如`spring-boot-starter-myapp`。 3. **`spring.factories`**:在Starter的`META-INF/spring.factories`文件中添加`org.spring...

    springboot自定义Starter过程解析

    在Spring Boot生态系统中,自定义Starter是一种强大的方式来封装和重用代码,使得其他开发者可以轻松地在他们的项目中引入特定的功能。本篇文章将详细解析如何创建一个自定义的Spring Boot Starter,以及在这个过程...

    my-springboot-starter.zip

    通过创建自定义Starter,我们可以将常见的配置、依赖和初始化逻辑打包,使得在新项目中使用这些功能时,只需添加一个Maven或Gradle依赖即可。 在创建自定义Starter时,通常包括以下几个关键步骤: 1. **定义Maven...

    自定义springboot-starter项目源码【cwp-spring-boot-starter】

    在自定义的`cwp-spring-boot-starter`项目中,我们可以深入理解SpringBoot Starter的工作原理以及如何根据需求构建自己的Starter。 首先,`cwp-spring-boot-starter`这个名字暗示这是一款定制的SpringBoot启动器,...

    Spring boot创建自定义starter的完整步骤

    Spring Boot的自定义starter是开发人员扩展其功能和定制化应用的一种强大方式。本文将详细介绍创建自定义starter的完整步骤,以及如何利用starter模块来优化项目配置。 首先,理解starter的作用至关重要。starter是...

    customize springboot-starter.rar

    这样,当项目引入自定义starter后,Spring Boot会自动加载这些配置,简化项目的配置工作。 3. **源码分析**: 压缩包中的源码部分可能包含以下内容: - 自定义配置类:这些类通常带有`@Configuration`注解,用于...

    自定义springboot starter,提供HelloService

    自定义springboot starter

    request-springboot-starter一个request/response,jdk8日期,跨域请求,国际化的增强包

    Spring Boot 默认提供了强大的Web支持,而`request-springboot-starter`进一步加强了这一能力。它可能包括但不限于以下功能: - 自动转换请求参数:自动将请求体中的JSON数据映射到Java对象。 - 响应结果封装:...

    案例实战-SpringBoot3.x自定义封装starter实战

    理解并掌握自定义starter的创建过程,将有助于我们更好地利用Spring Boot的优势,实现高效开发。 首先,我们需要了解Spring Boot starter的基本结构。一个starter通常包含以下几部分: 1. **pom.xml**:这是项目的...

    自定义 SpringBoot-Starter email-spring-boot-starter.zip

    为了简化开发过程,开发者经常创建自定义的Spring Boot Starter,以便于复用和快速集成特定功能。本项目"email-spring-boot-starter"就是一个这样的例子,它提供了一个方便的邮件发送服务,能够直接与126、QQ等主流...

Global site tag (gtag.js) - Google Analytics