展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

自定义starter

  • 新建1个项目,并在里面新建2个子模块
atguigu-hello-spring-boot-starter作为启动器
atguigu-hello-spring-boot-starter-autoconfigure用于自动配置包
  • 启动器子模块中添加配置包
<dependencies>
    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>atguigu-hello-spring-boot-starter-autoconfigure</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>
  • 在配置包子模块中编写如下
# pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>

# 用于读取外部配置文件
@ConfigurationProperties("atguigu.hello")
public class HelloProperties {

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

# 编写1个方法用于测试
/**
 * 默认不要放在容器中
 */
public class HelloService {

    @Autowired
    HelloProperties helloProperties;

    public String sayHello(String userName){
        return helloProperties.getPrefix() + ":"+userName+"》"+helloProperties.getSuffix();
    }
}

# 用于自动配置
@Configuration
@EnableConfigurationProperties(HelloProperties.class)  //默认HelloProperties放在容器中
public class HelloServiceAutoConfiguration{

    @ConditionalOnMissingBean(HelloService.class)  // 当容器中没有HelloService时才自动注入
    @Bean
    public HelloService helloService(){
        HelloService helloService = new HelloService();
        return helloService;
    }

}

# META-INF中编写spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.atguigu.hello.auto.HelloServiceAutoConfiguration
  • ctrl选中后,打包到maven仓库中

  • 新建1个项目用于测试

  • pom.xml中引入依赖

<dependency>
    <groupId>com.atguigu</groupId>
    <artifactId>atguigu-hello-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
  • 配置yml
atguigu.hello.prefix=ATGUIGU
atguigu.hello.suffix=88888
  • 编写控制类测试
@RestController
public class HelloController {

    @Autowired
    HelloService helloService;

    @GetMapping("/hello")
    public String sayHello(){

        String s = helloService.sayHello("张三");
        return s;
    }
}
  • 如果自己在容器中注入HelloService,就不会使用自定starter中的HelloService
@Configuration
public class MyConfig {

    @Bean
    public HelloService helloService(){
        HelloService helloService = new HelloService();
        return helloService;
    }
}
posted @ 2022-08-01 13:53  DogLeftover  阅读(13)  评论(0编辑  收藏  举报