SpringBoot如何实现starter原理详解
1、Mybatis ⾃定义配置的分析
在我们⾃定义starter之前我们写了解⼀下Mybatis 是如何实现starter
spring怎么读取properties在SpringBoot 引⼊的依赖如下:
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
mybatis的maven 依赖,主要涉及到的内容,spring.factories、MybatisAutoConfiguration、MybatisProperties
我们来看⼀下 META-INF/spring.factories⽂件,这个⽂件是以Map 形式存放的。key是EnableAutoConfiguration类的全类名,
value是⼀个MybatisAutoConfiguration,这就是当项⽬启动⾃动配置的类。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
MybatisAutoConfiguration
@Configuration //标⽰是⼀个配置类
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) //表⽰当SqlSessionFactory,SqlSessionFactoryBean存在这个配置类才⽣效。
@EnableConfigurationProperties({MybatisProperties.class}):就是把 MybatisProperties加⼊到 IOC 容器中。
MybatisProperties
对于@ConfigurationProperties注解它的作⽤就是把全局配置⽂件中的值绑定到实体类JavaBean上⾯(将配置⽂件中的值与MybatisProperties绑定起来),⽽@EnableConfigurationProperties主要是把以绑定值JavaBean加⼊到spring容器中。
分析完这些规则后,我们再来看看mybatis⾃定义的starter 的项⽬结构,主要是分为两个项⽬(⼀个是空项⽬(mtbatis-spring-boot-starter),⼀个是具体的实现⾃定义配置的项⽬(mybatis-spring-boot-autoconfigure)),空项⽬只是引⼊⾃定义配置项⽬的依赖,⽽实现映⼊的时候我们只需要映⼊空项(mtbatis-spring-boot-starter)即可。
到此我们已经分析完mybatis ⾃定义的starter,下⾯我们⾃⼰来实现⼀个⾃定义的starter。
2、⾃定义starter的实现
项⽬结构展⽰:
⾸先我们先定义⼀个 zfauto-spring-boot-autoconfigure ⼯程
编写属性类:添加 @ConfigurationProperties注解和前缀 zf.auto。之后我们就可以在 application.properties或l 中使⽤ zf.auto=指定参数了,由于篇幅的原因省略setter getter⽅法,实际是需要的,不然⽆法注⼊;
@ConfigurationProperties(prefix = "zf.auto")
public class HelloProperties {
private String prefix;
private String suffix;
}
编写配置类:加⼊@Configuration注解,@ConditionalOnWebApplication是web 应⽤配置类才起作⽤,以及 @EnableConfigurationProperties(HelloProperties.class) 注解,将属性注⼊到 IOC 容器中。
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
@Autowired
HelloProperties helloProperties;
@Bean
public HelloService helloService(){
HelloService helloService=new HelloService();
helloService.setHelloProperties(helloProperties);
return helloService;
}
}
编写 spring.factories ⽂件:在resources路径下⾯创建META-INF,⽂件夹,然后创建spring.factories⽂件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zfauto.starter.HelloServiceAutoConfiguration
然后我们在创建⼀个空项⽬(zfauto-spring-boot-starter),在这个项⽬中我们引⼊zfauto-spring-boot-autoconfigure依赖
<dependency>
<groupId>com.zfauto.starter</groupId>
<artifactId>zfauto-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
HelloService 实现的功能,省略setter,getter的⽅法(实际需要)
public class HelloService {
HelloProperties helloProperties;
public String sayHello(String name){
Prefix()+ ","+name+","+Suffix();
}
}
最后我们分别将项⽬打包,由于zfauto-spring-boot-starter是依赖于zfauto-spring-boot-autoconfigure,所以我们先对zfauto-spring-boot-autoconfigure进⾏打包,然后通过 mvn install 打到本地仓库(如何打包见下图)。
到此我们⾃定义的类实现。那我们来测试⼀下,这个和我们引⼊其他的starter⼀样了。创建项⽬zfauto-spring-boot-starter-test ,引⼊⾃定义starter的依赖。
<dependency>
<groupId>com.zfauto.starter</groupId>
<artifactId>zfauto-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
application.properties中的配置如下
zf.auto.prefix=hello
zf.auto.suffix=123
具体的测试类
@RestController
public class HelloController {
@Autowired
HelloService helloService;
@RequestMapping("/sayHello")
public String sayHello(){
return helloService.sayHello("⼩福⼦");
}
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论