starter原理
- SpringBoot 在启动时会去依赖的starter包中寻找 resources/META-INF/spring.factories 文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包,这类似于 Java 的 SPI 机制。
- 根据 spring.factories 配置加载AutoConfigure类。
- 根据 @Conditional 注解的条件,进行自动配置并将Bean注入Spring Context 上下文当中。
starter封装
1.准备好要封装的mvn项目converter-core
2.新建一个module项目converter-spring-starter,在最外层pom文件中引入该module。
<module>converter-spring-starter</module>
3 在converter-spring-starter下的pom文件中引入依赖
<dependency>
<groupId>com.converter</groupId>
<artifactId>converter-core</artifactId>
<version>${converterVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
4 自动配置类
使用@Configuration和@Bean配置
@Configuration
@ConditionalOnClass(prefix=xxx.class)
public static void AutoConfig(){
@Bean
public Config msgConfig(){
return new Config();
}
}
5 新建启动文件。
在resource下新建META-INF文件夹,并在下面新建spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
x.x.x.AutoConfig
6 启动类
编写项目入口启动类
@SpringBootApplication
public class ConverterApplication(){
public static void main(String[]args){
SpringApplication.run(ConverterApplication.class);
}
}
测试
1 测试类包名和启动类包名一致
测试类代码
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = ConverterApplication.class)
public class BaseTest{
@Autowired
private Config msgConfig;
@Test
public void Test(){
测试代码;
}
}
@SpringBootTest注解是一个Spring Boot提供的注解,通过这个注解可以使JUnit单元测试跑在Spring Boot的运行环境中。
@RunWith注解是一个运行器,其接受一个类的签名来指定是使用什么类、在什么环境下运行。
@RunWith(JUnit4.class)就是指用JUnit4来运行。
@RunWith(SpringJUnit4ClassRunner.class)就是让测试运行于Spring测试环境。
2 在test/resource中进行文件配置