1、SpringBoot自定义starters
SpringBoot的强大点就是把所有的场景抽象成starter场景启动器。
尽管已经定义好了,但依然可能无法满足我们的需求。
1.1 starter:
1 2 3 4 5 6 7 8
| @Configuration @ConditionalOnXXX @AutoConfigureAfter
@Bean
@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置 @EnableConfigurationProperties
|
1 2 3 4
| org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
|
模式:
启动器只用来做依赖导入;
专门来写一个自动配置模块;
启动器依赖自动配置;别人只需要引入启动器(starter)
mybatis-spring-boot-starter;自定义启动器名-spring-boot-starter
1.2 步骤
- 首先在IDEA创建两个基础Maven项目:starter和autoconfiguration工程
- 启动器模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?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>
<groupId>com.custom.starter</groupId> <artifactId>custom-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version>
<dependencies> <dependency> <groupId>com.custom.starter</groupId> <artifactId>custom-spring-boot-starter-autoconfiguration</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
</project>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <?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>
<groupId>com.custom.starter</groupId> <artifactId>custom-spring-boot-starter-autoconfiguration</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging>
<name>custom-spring-boot-starter-autoconfiguration</name> <description>Demo project for Spring Boot</description>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> <relativePath/> </parent>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties>
<dependencies>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> </project>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @ConfigurationProperties(prefix = "custom.hello") public class HelloProperties {
private String prefix; private String suffix;
public String getPrefix() { return prefix; }
public void setPrefix(String prefix) { this.prefix = prefix; }
public String getSuffix() { return suffix; }
public void setSuffix(String suffix) { this.suffix = suffix; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class HelloService {
HelloProperties helloProperties;
public HelloProperties getHelloProperties() { return helloProperties; }
public void setHelloProperties(HelloProperties helloProperties) { this.helloProperties = helloProperties; }
public String sayHello(String name){ return helloProperties.getPrefix()+"-" +name + helloProperties.getSuffix(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Configuration @ConditionalOnWebApplication @EnableConfigurationProperties(HelloProperties.class) public class HelloServiceAutoConfiguration {
@Autowired HelloProperties helloProperties; @Bean public HelloService helloService(){ HelloService service = new HelloService(); service.setHelloProperties(helloProperties); return service; } }
|
- 同样,想要配置类生效,就要在resources/META-INF/spring.factories编写路径
1 2
| org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.custom.starter.HelloServiceAutoConfiguration
|
- 最后将这2个项目都安装到Maven仓库中,点击IDEA右边Maven Projects,在两个项目的Lifecycle下点击install安装即可。
1.3 测试
创建一个新的项目,测试上面我们自定义的starters
- 在项目的pom.xml文件中引入,自定义starters
1 2 3 4 5 6
| <dependency> <groupId>com.custom.starter</groupId> <artifactId>atguigu-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
|
1 2 3 4 5 6 7 8 9 10 11
| @RestController public class HelloController {
@Autowired HelloService helloService;
@GetMapping("/hello") public String hello(){ return helloService.sayHello("starter"); } }
|
1 2
| custom.hello.prefix=CUSTOM custom.hello.suffix=HELLO WORLD
|
2、更多SpringBoot整合示例
GitHub示例