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
复制代码