我们可以认为starter是一种服务,在使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动注入的bean。
我们在开发springboot项目的时候,经常会引用spring-boot-starter-web,spring-boot-starter-data-jpa等一些常用的依赖,我们也可以自己封装一个服务,然后再需要用的项目中引入依赖即可使用.
首先先创建一个Maven项目
2.3.0.RELEASE
1.7.25
org.springframework.boot
spring-boot-autoconfigure
${srping.boot.version}
org.springframework.boot
spring-boot
${srping.boot.version}
true
org.springframework.boot
spring-boot-configuration-processor
${srping.boot.version}
org.slf4j
slf4j-api
${slf4j.version}
通过@ConfigurationProperties注解绑定前缀是my.db得属性
@ConfigurationProperties(prefix = "my.db")
public class DbConfig {
private String username;
private String password;
//省略get,set方法
}
该类只有一个toString方法输出属性信息
public class DbServer {
private String username;
private String password;
//省略get,set方法
@Override
public String toString(){
return "DbServer{username=" + username + " ,password=" + password + "}";
}
下面代码通关EnableConfigurationProperties注入了DbConfig对象,然后把属性赋值给了
DbServer对象,最后调用了print打印方法.
@Configuration
@EnableConfigurationProperties(DbConfig.class)
public class DbAutoConfiguration {
Logger logger= LoggerFactory.getLogger(this.getClass());
@Bean
public DbServer getBean(DbConfig dbConfig) {
//创建组件实例
logger.info("开始注册我的Bean对象");
DbServer dbServer = new DbServer();
dbServer.setUsername(dbConfig.getUsername());
dbServer.setPassword(dbConfig.getPassword());
return dbServer;
}
}
在resources目录下新建META-INF/spring.factories文件
第2行添加需要暴露的类的名称(包含包名)
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ljm.boot.starter.config.DbAutoConfiguration
该文件会被 @SpringBootApplication注解中会下面被扫描并加载.
在程序的跟路径执行
mvn clean install
创建一个springboot项目,然后引入刚发布的jar包
com.ljm.boot
my-spring-boot-starter
v1.0
@RestController
public class TestController {
@Autowired
DbServer dbServer;
@RequestMapping("/test")
public String test(){
return dbServer.toString();
}
}
my:
db:
username: test
password: 123456
server:
port: 8008
由于我们在DbConfig中声明过这2个属性,所以在yml文件中能通过提示补齐属性
能够看到控制台输出了my-spring-boot-starter依赖中的 ‘开始注册我的Bean对象‘ log信息.,
重下面日志信息打印中可以看到我们创建的starter中注册bean的类是EnhancerBySpringCGLIB动态代理生成的。
测试接口
可以看到接口也正常的返回了注入bean对象的属性信息
github地址
要是觉得我写的对你有点帮助的话,麻烦在github上帮我点 Star
【SpringBoot框架篇】其它文章如下,后续会继续更新。