SpringBoot中自定义starter实例与原理

1 自定义启动器

本文首先提出以下开发需求:需要自定义一个启动器spring-boot-football-starter,业务方引入这个启动器之后可以直接使用Football实例。

1.1 创建项目

1.1.1 项目名

java-front-football-starter
复制代码

1.1.2 springboot版本号

<dependency>
    <artifactId>spring-boot-dependencies</artifactId>
    <groupId>org.springframework.boot</groupId>
    <scope>import</scope>
    <type>pom</type>
    <version>2.1.7.RELEASE</version>
</dependency>
复制代码

1.2 创建Football

@Getter
@Setter
public class Football {
    private String a;
    private String b;
}
复制代码

1.3 创建配置类

@Getter
@Setter
@ConfigurationProperties(prefix = "football") // prefix不支持驼峰命名
public class FootballProperties {
    private boolean enable = true;
    private String a;
    private String b;
}
复制代码

1.4 创建AutoConfiguration

@Slf4j
@Configuration
@ConditionalOnClass(Football.class) // 只有当classpath中存在Football类时才实例化本类
@EnableConfigurationProperties(FootballProperties.class)
public class FootballAutoConfiguration {

    @Autowired
    private FootballProperties footballProperties;

    @Bean
    @ConditionalOnMissingBean(Football.class) // 只有当容器不存在其它Football实例时才使用此实例
    public Football football() {
        if (!footballProperties.isEnable()) {
            String defaultValue = "default";
            Football football = new Football();
            football.setA(defaultValue);
            football.setB(defaultValue);
            log.info("==========football close bean={}==========", JSON.toJSONString(football));
            return football;
        }
        Football football = new Football();
        football.setA(footballProperties.getA());
        football.setB(footballProperties.getB());
        log.info("==========football open bean={}==========", JSON.toJSONString(football));
        return football;
    }
}
复制代码

  • 条件注解说明
@ConditionalOnBean
只有在当前上下文中存在某个对象时才进行实例化Bean

@ConditionalOnClass
只有classpath中存在class才进行实例化Bean

@ConditionalOnExpression
只有当表达式等于true才进行实例化Bean

@ConditionalOnMissingBean
只有在当前上下文中不存在某个对象时才进行实例化Bean

@ConditionalOnMissingClass
某个class类路径上不存在时才进行实例化Bean

@ConditionalOnNotWebApplication
当前应用不是WEB应用才进行实例化Bean
复制代码

1.5 spring.factories

  • 工厂文件位置
- src/main/resources
    - META-INF
        -spring.factories
复制代码

  • 工厂文件内容
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.java.front.football.starter.configuration.FootballAutoConfiguration
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值