avatar

Boot自动装配原理以及自定义starter`

SpringBoot自动装配原理

在main方法中,我们调用springboot.run()方法启动springboot应用,然后在这个方法里面有一个refreshcontext()方法,刷新容器,会去解析我们主方法上面的@SpringbootApplication注解

把我们的bean注入到容器中,在@SpringbootApplication这个注解中,他是一个复合注解,其中有一个叫做@EnableAutoConfiguration,在这个注解中他会import一个类AutoConfigurationImportSelector.class,这个类会在spring-boot-autoconfigure包下的/META-INF/spring.factories这个文件下,去加载里面已经写好的很多的autoconfigure自动配置类,在这些类中,有很多的条件注解例如@ConditionalOnMissingBean@ConditionalOnClass,然后会把相应的bean自动注入到容器中

SpringBoot 自定义starter

starter就是Spring Boot快速整合第三方框架的依赖

首先使用@ConfigurationProperties声明一个配置类

1
2
3
4
5
6
@ConfigurationProperties(prefix = "hobocool")
public class TokenProperties {
private String redisHost;
private String redisPwd;
// getter setter省略
}

编写一个业务类

1
2
3
4
5
6
7
8
public class TokenService {
@Autowired
private TokenProperties tokenProperties;
public String getToken(){
System.out.println("模拟生成token");
return tokenProperties.getRedisHost() + "," + tokenProperties.getRedisPwd();
}
}

编写自动配置类,讲业务类和配置类注入至容器中

1
2
3
4
5
6
7
8
@Configuration
@EnableConfigurationProperties({TokenProperties.class})
public class TokenAutoConfiguration {
@Bean
public TokenService tokenService(){
return new TokenService();
}
}

在resource下创建META-INF/spring.factories文件,我们填下以下内容,spring boot会自动去扫描其并注入容器中

1
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ccsu.config.TokenAutoConfiguration

之后是命令行输入mvn clean install讲其打包放入我们自己的maven仓库中,之后通过以下即可直接引用

1
2
3
4
5
<dependency>
<groupId>com.ccsu</groupId>
<artifactId>token-redis-spring-boot-starter</artifactId>
<version>1.1</version>
</dependency>

注意:如果想让在使用的时候出现参数提示,需要在stater中引入spring-boot-configuration-processor

1

starter总结

四步走

  1. 定义配置文件类,例如TokenProperties,使用@ConfigurationProperties

  2. 定义自动配置类,例如TokenAutoConfiguration,使用注解@Configuration @EnableConfigurationProperties把配置类注入进来,同时注入一些业务类

  3. resources下创建META-INF/spring.factories文件

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ccsu.config.TokenAutoConfiguration

  4. mvn clean install打包进入我们自己的maven仓库,就可以直接引入了

文章作者: Hobo
文章链接: https://hobo-clh.github.io/2020/09/03/Boot%E8%87%AA%E5%8A%A8%E8%A3%85%E9%85%8D%E5%8E%9F%E7%90%86%E4%BB%A5%E5%8F%8A%E8%87%AA%E5%AE%9A%E4%B9%89starter/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hobo's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论