spring boot 自定义starter的实现教程

spring boot 使用 starter 解决了很多配置问题, 但是, 他是怎么来解决这些问题的呢?

这里通过一个简单的例子, 来看一下, starter是怎么来设置默认配置的.

一. 建 starter 项目

自定义的starter, 项目命名规范是: 自定义名-spring-boot-starter

先来看一下, 我最后的目录结构

1. 修改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>org.elvin</groupId>
 <artifactId>my-spring-boot-starter</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>
 <name>my-spring-boot-starter</name>
 <url>http://maven.apache.org</url>
 <properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>
 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-autoconfigure</artifactId>
 <version>1.5.9.RELEASE</version>
 </dependency>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>3.8.1</version>
 <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>2.3.2</version>
 <configuration>
  <source>1.8</source>
  <target>1.8</target>
 </configuration>
 </plugin>
 </plugins>
 </build>
</project>

其实只是加入了 spring-boot-autoconfigure

App文件中的main方法, 我注释掉了, 这个在这里没有用到

2. 配置属性对应的接收文件

package org.elvin;
import org.springframework.boot.context.properties.ConfigurationProperties;/**
 * author: Elvin
 * Date: 2017/12/12 14:51
 * Description:
 */
@ConfigurationProperties(prefix = "hello")
public class HelloServiceProperties {
 //默认配置内容
 private static final String MSG = "world";
 private String msg = MSG;
 public String getMsg() {
 return msg;
 }
 public void setMsg(String msg) {
 this.msg = msg;
 }
}

3. 对外Service

package org.elvin;
/**
 * author: Elvin
 * Date: 2017/12/12 14:55
 * Description:
 */
public class HelloService {
 private String msg;
 public String sayHello(){
 return "Hello " + msg;
 }
 public String getMsg() {
 return msg;
 }
 public void setMsg(String msg) {
 this.msg = msg;
 }
}

4. 对外service与配置对应文件关联

package org.elvin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * author: Elvin
 * Date: 2017/12/12 14:59
 * Description:
 */
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloService.class)
@ConditionalOnProperty(prefix = "hello", value="enabled", matchIfMissing =true )
public class HelloServiceAutoConfiguration {
 @Autowired
 private HelloServiceProperties helloServiceProperties;
 @Bean
 @ConditionalOnMissingBean(HelloService.class)
 public HelloService helloService(){
 HelloService helloService = new HelloService();
 helloService.setMsg(helloServiceProperties.getMsg());
 return helloService;
 }
}

5. starter配置 : spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.elvin.HelloServiceAutoConfiguration

做完这些之后, 通过 mvn clean install , 打包到maven库里面

二. spring boot 项目使用

新建一个spring boot 项目, 选择web即可.

目录结构:

先看一下引用pom.xml

<dependency>
   <groupId>org.elvin</groupId>
   <artifactId>my-spring-boot-starter</artifactId>
   <version>1.0-SNAPSHOT</version>
  </dependency>

再看一下HelloController

package org.elvin.learn.springboot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.elvin.*;
/**
 * author: Elvin
 * Date: 2017/12/12 15:34
 * Description:
 */
@RestController
@RequestMapping("hello")
public class HelloController {
 @Autowired
 private HelloService helloService;
 @RequestMapping("index")
 public String index(){
  return helloService.sayHello();
 }
}

这里的 HelloService 就是 前面自定义 starter 里面的.

1. 结果: 未配置情况下, 应该是输出 hello world

2. 在配置文件中, 加入 hello.msg=hahahahahah

这个例子很简单, 只是显示一下主要的过程, 别的都是各插件自己的逻辑判断了.

参考资料:

JavaEE开发的颠覆者 Spring Boot实战

以上这篇spring boot 自定义starter的实现教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • 初识Spring Boot框架之Spring Boot的自动配置
  • 深入浅析 Spring Boot Starter
  • spring boot自定义配置源操作步骤
(0)

相关推荐

  • 深入浅析 Spring Boot Starter

    Spring Boot 简介 Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西.因此就有了Spring Boot框架,它的作用很简单,就是帮我们自动配置.Spring Boot框架的核心就是自动配置,只要存在相应的jar包,Spring就帮我们自动配置.如果默认配置不能满足需求,我们还可以替换掉自动配置类,使用我们自己的配置.另外,Spring Boot还集成了嵌入式的Web服务器,系统监控等很多有用的功,让我们快速构建企业及应用程序. 依赖管理是任何复杂项目的关键部

  • 初识Spring Boot框架之Spring Boot的自动配置

    在上篇博客初识Spring Boot框架中我们初步见识了SpringBoot的方便之处,很多小伙伴可能也会好奇这个spring Boot是怎么实现自动配置的,那么今天我就带小伙伴我们自己来实现一个简单的Spring Boot 自动配置的案例,看看这一切到底是怎么发生的. 假设我的需求是这样的:当我的项目中存在某个类的时候,系统自动为我配置该类的Bean,同时,我这个Bean的属性还可以在application.properties中进行配置,OK,就这样一个需求,我们来看看怎么实现. 1.新建s

  • spring boot自定义配置源操作步骤

    概述 我们知道,在Spring boot中可以通过xml或者@ImportResource 来引入自己的配置文件,但是这里有个限制,必须是本地,而且格式只能是 properties(或者 yaml).那么,如果我们有远程配置,如何把他引入进来来呢. 如何做 其实自定义配置源只需要3步 第一步,编写PropertySource 编写一个类继承EnumerablePropertySource,然后实现它的抽象方法即可,抽象方法看名字就知道作用,简单起见,这里使用一个map来保存配置,例如: publ

  • spring boot 自定义starter的实现教程

    spring boot 使用 starter 解决了很多配置问题, 但是, 他是怎么来解决这些问题的呢? 这里通过一个简单的例子, 来看一下, starter是怎么来设置默认配置的. 一. 建 starter 项目 自定义的starter, 项目命名规范是: 自定义名-spring-boot-starter 先来看一下, 我最后的目录结构 1. 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

  • Spring Boot自定义 Starter并推送到远端公服的详细代码

    目录 一.新建项目,完善pom文件 二.编写业务逻辑 三.编写自动配置类AutoConfig 四.编写spring.factories文件加载自动配置类 五.maven打包 六.推送到远端仓库,使用JitPack 七.使用案例 八.相关问题 一.新建项目,完善pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.

  • Spring Boot 自定义starter的示例代码

    SpringBoot 个人感觉特点: 1)众多库的集合(各种Starter),方便快速构建应用系统. 2)自动配置spring(通过AutoConfiguration机制),简化配置,也方便扩展新的Starter. 3)内嵌web容器,无需WAR部署. 创建一个用maven构建的springboot项目 pom文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht

  • Spring Boot自定义Starter组件开发实现配置过程

    目录 自定义starter 为什么要自定义starter 自定义starter的命名规则 实现方法 引入依赖 编写测试类 创建配置类 创建spring.factories文件 乱码问题 解决方案: 1. 使用yml配置文件进行配置. 2. 使用自定义配置文件如: 3. 把中文换成对应的ASCII码. 自定义starter SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进 starter,应用者只需要在maven中引入starter依赖,Sprin

  • Spring Boot自定义配置实现IDE自动提示功能

    一.背景 官方提供的spring boot starter的配置项,我们用IDE配置的时候一般都有自动提示的,如下图所示 而我们自己自定义的配置却没有,对开发非常不友好容易打错配置, 那这个是怎样实现的呢? 二.提示原理 IDE是通过读取配置信息的元数据而实现自动提示的,而元数据在目录 META-INF 中的 spring-configuration-metadata.json 或者 additional-spring-configuration-metadata.json 三.实现自动提示 以

  • 基于JWT的spring boot权限验证技术实现教程

    JWT简介 Json Web Token(JWT):JSON网络令牌,是为了在网络应用环境间传递声明而制定的一种基于JSON的开放标准((RFC 7519).JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式用于通信双方之间以 JSON 对象行使安全的传递信息.因为数字签名的存在,这些信息是可信的. 实现步骤: 环境spring boot 1.添加jwt依赖 <dependency> <groupId>com.auth0</groupId> <ar

  • Spring Boot 员工管理系统超详细教程(源码分享)

    员工管理系统 1.准备工作 资料下载 内含源码 + 笔记 + web素材 源码下载地址: http://xiazai.jb51.net/202105/yuanma/javaguanli_jb51.rar 笔记 素材 源码 1.1.导入资源 将文件夹中的静态资源导入idea中 位置如下 1.2.编写pojo层 员工表 //员工表 @Data @NoArgsConstructor public class Employee { private Integer id; private String l

  • spring boot actuator监控超详细教程

    spring boot actuator介绍 Spring Boot包含许多其他功能,可帮助您在将应用程序推送到生产环境时监视和管理应用程序. 您可以选择使用HTTP端点或JMX来管理和监视应用程序. 审核,运行状况和指标收集也可以自动应用于您的应用程序. 总之Spring Boot Actuator就是一款可以帮助你监控系统数据的框架,其可以监控很多很多的系统数据,它有对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,如: 显示应用程序员的Health健康信息 显示Info应用信息

  • spring boot metrics监控指标使用教程

    目录 springbootmetrics是什么? 一.引入依赖 二.配置启用 三.独立的web服务 四.全局标签设置 五.自定义指标收集 六.推送or拉取指标 引入依赖 启用push模式 spring boot metrics是什么? 针对应用监控指标暴露,spring boot有一套完整的解决方案,并且内置了好很多的指标收集器,如tomcat.jvm.cpu.kafka.DataSource.spring mvc(缺少直方图的数据)等.基于micrometer技术,几乎支持所有主流的监控服务的

  • Spring Boot 中starter的原理详析

    目录 1.springboot 的starter 的启动原理是什么 原理 来个例子 小结 2.springboot 是如何找到配置类的 3.springboot starter 的bean 是怎么加载到容器的 4.总结 前言: 今天介绍springboot ,也是写下springboot的插件机制,starter的原理,其实这个网上已经很多了,也是看了不少别人的文章,今天主要还是带着问题去记录下. 1.springboot 的starter 的启动原理是什么 原理 这个问题是很简单的,只要了解s

随机推荐