文章目录
简述
我们可以认为starter是一种服务,在使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动注入的bean。
我们在开发springboot项目的时候,经常会引用spring-boot-starter-web,spring-boot-starter-data-jpa等一些常用的依赖,我们也可以自己封装一个服务,然后再需要用的项目中引入依赖即可使用.
创建starter服务
首先先创建一个Maven项目
引入构建starter的核心依赖
<properties>
<srping.boot.version>2.3.0.RELEASE</srping.boot.version>
<slf4j.version>1.7.25</slf4j.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>${srping.boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>${srping.boot.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${srping.boot.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
创建配置类
通过@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 + "}";
}
注册Bean对象
下面代码通关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注解中会下面被扫描并加载.
- @SpringBootApplication
- @EnableAutoConfiguration
- @Import({AutoConfigurationImportSelector.class})
- getCandidateConfigurations()
- loadFactoryNames() 中被扫描到并加载
- loadFactoryNames() 中被扫描到并加载
- getCandidateConfigurations()
- @Import({AutoConfigurationImportSelector.class})
- @EnableAutoConfiguration
发布jar包到本地仓库
在程序的跟路径执行
mvn clean install
看到下面的SUCCESS就代表发布成功了
引入我的my-spring-boot-starter依赖
创建一个springboot项目,然后引入刚发布的jar包
引入依赖
<dependency>
<groupId>com.ljm.boot</groupId>
<artifactId>my-spring-boot-starter</artifactId>
<version>v1.0</version>
</dependency>
测试接口
@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框架篇】其它文章如下,后续会继续更新。
- 1.搭建第一个springboot项目
- 2.Thymeleaf模板引擎实战
- 3.优化代码,让代码更简洁高效
- 4.集成jta-atomikos实现分布式事务
- 5.分布式锁的实现方式
- 6.docker部署,并挂载配置文件到宿主机上面
- 7.项目发布到生产环境
- 8.搭建自己的spring-boot-starter
- 9.dobbo入门实战
- 10.API接口限流实战
- 11.Spring Data Jpa实战
- 12.使用druid的monitor工具查看sql执行性能
- 13.使用springboot admin对springboot应用进行监控
- 14.mybatis-plus实战
- 15.使用shiro对web应用进行权限认证
- 16.security整合jwt实现对前后端分离的项目进行权限认证
- 17.使用swagger2生成RESTful风格的接口文档