springboot作为一站式的整合框架,提供了良好的扩展机制,就是starter机制,让各种中间件可以灵活插拔,我们在封装一些通用工具也可以利用这种机制,非常优雅。
1、创建一个新的springboot的项目,编辑pom.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<groupId>com.laomanong</groupId>
<artifactId>demo-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<name>demo-spring-boot-starter</name>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
</dependencies>
</project>
2、定义一个配置类,用来动态注入starter自身的特定属性值
package com.laomanong.demo.springboot.config;
import com.laomanong.demo.springboot.service.DemoStarterService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//配置类
@Configuration
public class DemoConfiguration {
//提供starter配置属性laomanong-demo.ip,默认为127.0.0.1
@Value("${laomanong-demo.ip:127.0.0.1}")
private String ip;
//提供starter配置属性laomanong-demo.ip,默认为8080
@Value("${laomanong-demo.port:8080}")
private String port;
//注入一个服务类bean
@Bean
public DemoStarterService demoStarterService() {
return new DemoStarterService(ip, port);
}
}
3、定义一个starter的服务具体服务类,我们模拟一个简单的获取IP和端口测试连通性
package com.laomanong.demo.springboot.service;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Data
@Slf4j
public class DemoStarterService {
private String ip;
private String port;
//测试链接
public void connect() {
log.info("{}:{},链接成功",ip,port);
}
//构造函数
public DemoStarterService(String ip, String port) {
this.ip = ip;
this.port = port;
}
}
4、在resources/META-INF/spring.factories文件中编写自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.laomanong.demo.springboot.config.DemoConfiguration
5、利用maven进行本地打包安装
6、在另一个springboot项目测试一下,加入demo-starter依赖
<!-- demo starter -->
<dependency>
<groupId>com.laomanong</groupId>
<artifactId>demo-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
7、编写一个controller
package com.laomanong.springboot.controller;
import com.laomanong.demo.springboot.service.DemoStarterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@Autowired
private DemoStarterService demoStarterService;
@GetMapping("/showStarterInfo")
public void showStarterInfo(){
demoStarterService.connect();
}
}
8、在配置文件appliaction.perperties里加入starter特定配置
laomanong-demo.ip:www.laomanong.com
laomanong-demo.port:8888
9、启动程序,访问http://localhost:8888/ showStarterInfo
查看控制台
可以看到我们自定义的starter成功运行,配置项成功注入,非常优雅和灵活,大家赶紧试一下吧。
--------------------------------------
关注我,跟随老码农探索更多Java秘密