SpringBoot核心【自定义starter】-阿里云开发者社区

开发者社区> 游客a74jvhcp7vclg> 正文

SpringBoot核心【自定义starter】

简介: 为了加深对SpringBoot中自动装配的理解,我们自定义一个starter来实现,具体步骤如下
+关注继续查看


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

自定义starter

IDEA中创建maven项目

image.png

指定项目的坐标信息

image.png

image.png

项目创建完成~

配置依赖

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

<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>

属性配置类

/**
 * @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;
    }
}

判断依据类

/**
 * @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

自动配置类

/**
 * @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,如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.dpb.spring_boot_starter_hello.HelloServiceAutoConfiguration

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

结构如下:

image.png

使用自定义的starter

1.创建好SpringBoot项目

 创建好一个SpringBoot项目。

2.引入我们自定义的starter

<dependency>
    <groupId>com.dpb</groupId>
    <artifactId>spring-boot-starter-hello</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

3.查看引入的具体依赖

image.png

4.工具类中使用

/**
 * @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中加入如下配置即可

debug=true

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

image.png

访问:http://localhost:8082/

image.png

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

hello.msg=波波烤鸭

再次启动访问结果如下:

image.png

ok~自定义的starter搞定


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10081 0
springboot自定义错误页面
springboot自定义错误页面 1.加入配置: @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return (contain...
1264 0
SpringBoot从小白到精通(三)系统配置及自定义配置
前面介绍了Spring的@Controller和@RestController控制器, 他们是如何响应客户端请求,如何返回json数据。 今天来说一说SpringBoot的application.properities的相关配置属性和如何自定义配置文件。
297 0
.Net——自定义特性(Custom Attributes)的创建与查看
                         有时候,我们会看到这样的东西放在类或者方法上面:                [Obsolete("请更新方法")]                     刚开始的时候,还自己给它起了个名字——小标签,比如,平常会说:你数据契约是不是没打标签啊!~嘿嘿~ 后来跟代码发现了更多的不认识的自定义标签。
896 0
Springboot自定义异常处理
1.自定义异常类 import lombok.Data; @Data public class UserException extends RuntimeException { private Long id; public UserException(Long id) { super("user not exist"); this.
1223 0
android AutoCompleteTextView 自定义BaseAdapter
最近项目中需要做搜索功能,实现类似 Google、Baidu 搜索的 下拉提示效果。Android为我们提供了 AutoCompleteTextView 控件来完成此功能。 网上好多例子都是简单使用 ArrayAdapter 来实现的,界面比较简单,实际项目中用处不大;自己研究了一番,自定义Adapter 继承BaseAdapter 并实现Filterable 接口 实现了上述功能。
964 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13885 0
【spring boot logback】日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么
本篇 将针对【日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么】这一个主题进行探索。 这个测试项目是根据【spring boot】8.
1979 0
Spring Boot 自定义starter
一、简介 SpringBoot 最强大的功能就是把我们常用的场景抽取成了一个个starter(场景启动器),我们通过引入springboot 为我提供的这些场景启动器,我们再进行少量的配置就能使用相应的功能。
1296 0
+关注
游客a74jvhcp7vclg
10余年开发架构经验,同时乐于技术分享!
332
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载