美文网首页
手写一个springboot starter

手写一个springboot starter

作者: 写代码的杰西 | 来源:发表于2020-06-29 21:28 被阅读0次

springboot的starter的作用就是自动装配。将配置类自动装配好放入ioc容器里。作为一个组件,提供给springboot的程序使用。
今天手写一个starter。写一个dog类,有个bark方法,能叫唤出自己的名字。
建一个普通的maven工程,引入springboot依赖
pom.xml

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot</artifactId>
      <version>2.3.1.RELEASE</version>
    </dependency>

类定义如下:


public class Dog {
    private String name;
    private String color;

    public String bark(){
        System.out.println("My name is :"+name);
        return "My name is :"+name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

Dog定义好以后,要把它注册到spring容器中。建一个configuration类。



@Configuration
public class DogAutoConfiguration {

    @Bean
    Dog dog (){
        Dog dog = new Dog();
        return dog;
    }

}

bean注册到容器了,可是dog的属性还没有配置。为了能让用户自定义名字,建一个dogProperties


@ConfigurationProperties(prefix = "com.jesseyang")
public class DogProperties {
    private String name;
    private String color;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

更新 configuration类


@EnableConfigurationProperties(DogProperties.class)
@Configuration
public class DogAutoConfiguration {

    @Bean
    Dog dog (DogProperties dogProperties){
        Dog dog = new Dog();
        dog.setName(dogProperties.getName());
        dog.setColor(dogProperties.getColor());
        return dog;
    }

}

为了让springboot容器扫描到configuration类,建一个resource目录,一个meta-inf文件夹和spring.factories文件


spring.factories

内容如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.jesseyang.configuration.DogAutoConfiguration

这样springboot启动的时候就能扫描到我们的configuration类,注入我们的dog
maven -install一下
新建一个springboot项目,引入我们的项目

    <dependency>
            <groupId>com.jesseyang</groupId>
            <artifactId>starter-demo</artifactId>
            <version>1.0</version>
        </dependency>

application.properties里设置dog的名字

com.jesseyang.name="Jack"

测试一下


@SpringBootApplication
@RestController
public class DemoApplication {

    @Autowired
    Dog dog;

    @RequestMapping("dog")
    public String bark(){
        return dog.bark();
    }



    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

访问dog接口


image.png

我们自己的starter就完成了

相关文章

网友评论

      本文标题:手写一个springboot starter

      本文链接:https://www.haomeiwen.com/subject/dywafktx.html