SpringBoot专栏:自定义starters,编写插件之利器(第9讲)

SpringBoot专栏:自定义starters,编写插件之利器(第9讲)_第1张图片

1.使用场景

1.starter是springboot中提供的简化企业级开发绝大多数场景的一个工具,利用好strater就可以消除相关技术的配置得到自动配置好的Bean,举个例子,在一般使用中,我们使用基本的spring-boot-starter配置基本的springboot项目,也使用spring-boot-starter-web去配置web项目

2.开发自己的auto-configuration,也就是说为spring boot开发一些自动配置的模块的时候,这个时候就需要用到这个技术, 
完全可以通过一个注解或者引入一个jar包就开启这个功能

3.插件的编写也是一个不错的选择

最后,着重说先这个spring.factories
spring.factories这个主要是提供了一个功能,就是自动配置,不需要使用@EnableXXX来开启,也就是说只要你用了springboot,并且依赖了一个jar包,这个jar包就会自动进行初始化 ,那么这个过程就是使用了spring.factories这个文件配置

 

2、如何编写自动配置

@Configuration //指定这个类是一个配置类
@ConditionalOnXXX //在指定条件成立的情况下自动配置类生效
@AutoConfigureAfter //指定自动配置类的顺序
@Bean //给容器中添加组件
@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
@EnableConfigur
自动配置类要能加载
将需要启动就加载的自动配置类,配置在META‐INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicati

3.编写自动配置步骤

   构建starter模块(springboot-05-helloservice-autoconfig)和一个测试模块(代码最后共享)

SpringBoot专栏:自定义starters,编写插件之利器(第9讲)_第2张图片

starter模块

pom引入


	org.springframework.boot
	spring-boot-starter

 编写核心代码如下图:

接口服务类HelloService、配置文件注入类HelloConfig、启动配置类HelloServiceAutoConfiguration 

SpringBoot专栏:自定义starters,编写插件之利器(第9讲)_第3张图片

HelloService类

public class HelloService {

    //注意生成get set方法
    HelloConfig helloConfig;

    /**
     * 你好,方法
     * @param name  名称
     * @return
     */
    public String sayHello(String name){
        return helloConfig.getPrefix()+"-" +name + "-"+helloConfig.getSuffix();
    }

    public HelloConfig getHelloConfig() {
        return helloConfig;
    }

    public void setHelloConfig(HelloConfig helloConfig) {
        this.helloConfig = helloConfig;
    }

HelloConfig类

@ConfigurationProperties(prefix = "limp.hello")
public class HelloConfig {

    private String prefix;
    private String suffix;

    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

    public String getSuffix() {
        return suffix;
    }

    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }

HelloServiceAutoConfiguration类 


@Configuration
@ConditionalOnWebApplication //web应用才生效
@EnableConfigurationProperties(HelloConfig.class)

public class HelloServiceAutoConfiguration {

    @Autowired
    HelloConfig helloConfig;

    /**
     * bean注入
     * @return
     */
    @Bean
    public HelloService helloService(){
        HelloService service = new HelloService();
        service.setHelloConfig(helloConfig);
        return service;
    }

spring.factories 文件重点!!

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.limp.starter.HelloServiceAutoConfiguration

经过上面几步,starter基本就定义好了,很是方便,spring.factories之前不是很了解,通过这个案例也会加深下印象。

备注:说下编写规范(案例中用了一个模块去构建starter的,实际开发中尽量按照规范来)

SpringBoot专栏:自定义starters,编写插件之利器(第9讲)_第4张图片

3.测试调用springboot-05-test-starter

pom文件引入自定义的starter


	com.limp
	springboot-05-helloservice-autoconfig
	0.0.1-SNAPSHOT

配置文件:配置下前缀后缀

SpringBoot专栏:自定义starters,编写插件之利器(第9讲)_第5张图片

接下来就调用了HelloController

@RestController
public class HelloController {
    @Autowired
    HelloService helloService;


    @GetMapping(value = "hello")
    public  String sayhello(String name){

       return  helloService.sayHello(name);
    }
}

测试结果(成功)

SpringBoot专栏:自定义starters,编写插件之利器(第9讲)_第6张图片
 

End

最后祝大家快速掌握,早日加薪

源码地址:https://github.com/shinians/springboot-demos

如果帮助,点个关注呗 @架构师速成记

你可能感兴趣的:(Spring,Boot,SpringBoot入门)