在真实的开发中,自己封装starter 的场景是非常多,看完这篇文章,让你成为也会封装starter 的大神。
首先我们得了解一个注解,那就是@SpringBootApplication
想必大家都知道,这个注解我们一般是打在SpringBoot项目的启动类上,但是你真的了解这个注解吗?
@SpringBootApplication 注解,它是一个组合标签,包括:
- SpringBootConfuration ,本质是一个 Configuration ,代表Spring的配置类。
- ComponentScan IOC自动扫描的注解 ,会去扫描类上是否有:@Component ,@Respository ,@Service @Controller ,如果有,就会把这个类自动注册到Spring容器中。
- EnableAutoConfiguration :就是启动SpringBoot自动配置的注解。
在 @EnableAutoConfiguration 注解中,注册了一个选择器,其中有一个方法会去返回很多的自动配置的的全限定名,这些类会自动注册到Spring容器中,
那它是怎么去找到这些所谓的自动配置类的呢?
它会通过Spring的SPI接口,也就是通过一个SpringFactoryLoader去扫描 classpath中的所有的jar包中的 MET-INF/spring.factories 中的自动配置类,比如: DispatchServlert就对应了DispatchServlertAutoConfiguration自动配置类 , 它通过@Bean+方法的方式注册了一个 DispatchServlert 到Spring容器中了。
看到这里我向想大家应该有思路了,下面带大家一步一步封装starter
首先,在我们的项目里新建一个模块,编写自动配置类:
@Configuration
public class XxxAutoConfiguration {
@Bean
public XxxTemplate xxxTemplate() {
return new XxxTemplate();
}
}
自定义XxxTemplate
public class XxxTemplate {
//编写相关方法
}
在resource文件夹下建META-INF文件夹,去别的jar包C一个spring.factories,并且将自动配置类的全限定名粘贴在里面:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.yjcer.autoconfigure.XxxAutoConfiguration
Spring Boot 会扫描 starter 包里的 META-INF/spring.factories
文件,文件中列出了各种自动配置类。当满足特定条件(如类路径中有某个类、某个系统属性存在或某个环境变量设置为特定值等)时,相应的自动配置类会被加载并实例化,从而自动配置好对应的功能组件。
最后在别的模块,导入我们自定义的starter,在所需要的地方注入我们的Template,就可以调用里面的方法了,是不是很简单呢?