前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot核心【自定义starter】

SpringBoot核心【自定义starter】

作者头像
用户4919348
发布2019-05-15 13:14:12
6710
发布2019-05-15 13:14:12
举报
文章被收录于专栏:波波烤鸭波波烤鸭

  为了加深对SpringBoot中自动装配的理解,我们自定义一个starter来实现,具体步骤如下

自定义starter

IDEA中创建maven项目

在这里插入图片描述
在这里插入图片描述

指定项目的坐标信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目创建完成~

配置依赖

  在pom配置文件中添加如下依赖,增加SpringBoot自身的自动配置作为依赖。

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.1.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-configuration-processor</artifactId>
         <version>2.1.4.RELEASE</version>
     </dependency>
</dependencies>

属性配置类

代码语言:javascript
复制
/**
 * @program: spring-boot-starter-hello
 * @description: 属性配置类
 * @author: 波波烤鸭
 * @create: 2019-05-09 20:52
 */
@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;
    }
}

判断依据类

代码语言:javascript
复制
/**
 * @program: spring-boot-starter-hello
 * @description: 判断依据类
 * @author: 波波烤鸭
 * @create: 2019-05-09 20:58
 */
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;
    }
}

  根据此类的存在与否来创建这个类的bean

自动配置类

代码语言:javascript
复制
/**
 * @program: spring-boot-starter-hello
 * @description: 自动配置类
 * @author: 波波烤鸭
 * @create: 2019-05-09 21:00
 */
@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;
    }
}

  根据HelloServiceProperties提供的参数,并通过@ConditionalOnClass判断HelloService这个类在类路径中是否存在,且当容器中没有这个Bean的情况下自动配置这个bean。

注册配置

  若想自动配置生效,我们需要注册自动配置类,在src/main/resources下新建META-INF/spring.factories,如下:

代码语言:javascript
复制
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.dpb.spring_boot_starter_hello.HelloServiceAutoConfiguration

如果有多个自动配置,则用“,”隔开。

结构如下:

在这里插入图片描述
在这里插入图片描述

使用自定义的starter

1.创建好SpringBoot项目

  创建好一个SpringBoot项目。

2.引入我们自定义的starter

代码语言:javascript
复制
<dependency>
    <groupId>com.dpb</groupId>
    <artifactId>spring-boot-starter-hello</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

3.查看引入的具体依赖

在这里插入图片描述
在这里插入图片描述

4.工具类中使用

代码语言:javascript
复制
/**
 * @program: springboot-hello
 * @description: 自定义starter测试
 * @author: 波波烤鸭
 * @create: 2019-05-09 21:32
 */
@RestController
public class HelloStarterController {
    @Resource
    HelloService helloService;

    @RequestMapping("/")
    public String index(){
        return helloService.sayHello();
    }
}

5.启动测试 开启查看自动配置的选项和未开启自动配置的信息,在application.properties中加入如下配置即可

代码语言:javascript
复制
debug=true

在启动选项中我们发现了我们自定义的starter被自动配置了

在这里插入图片描述
在这里插入图片描述

访问:http://localhost:8082/

在这里插入图片描述
在这里插入图片描述

然后我们在application.properties中配置如下内容

代码语言:javascript
复制
hello.msg=波波烤鸭

再次启动访问结果如下:

在这里插入图片描述
在这里插入图片描述

ok~自定义的starter搞定

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义starter
    • IDEA中创建maven项目
      • 配置依赖
        • 属性配置类
          • 判断依据类
            • 自动配置类
              • 注册配置
              • 使用自定义的starter
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档