在springboot中,使用最多的就是starter。starter能够理解为一个可拔插式的插件,例如,你想使用jdbc插件,那么能够使用spring-boot-starter-jdbc。随着版本的推移Starter家族成员也与日俱增。在传统Maven项目中一般将一些层、组件拆分为模块来管理,以便相互依赖复用,在Spring Boot项目中咱们则能够建立自定义Spring Boot Starter来达成该目的。java
1、starter的工做原理web
一、springboot在启动时扫描项目所依赖的jar包,寻找包含搜spring.factories文件的jar包spring
二、根据spring.factories配置加载AutoConfiure类apache
三、根据@Conditional注解的条件,进行自动配置并将Bean注入spring context浏览器
2、自定义starterspringboot
一、IDEA建立一个empty projectapp
二、添加两个module,一个是自动配置(maven工程),一个是启动器(springboot工程),启动器依赖自动配置。maven
三、项目结构spring-boot
四、内部代码测试
(1)spring-boot-starter-autoconfigurer module
package com.springboot.starter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author:素小暖 * @date:2020/2/9 * @desc: */ @Configuration @EnableConfigurationProperties(HelloProperties.class) public class HelloAuto { @Autowired HelloProperties helloProperties; @Bean public HelloService helloService() { HelloService helloService = new HelloService(); helloService.setHelloProperties(helloProperties); return helloService; } }
package com.springboot.starter; import org.springframework.boot.context.properties.ConfigurationProperties; /** * @author:素小暖 * @date:2020/2/9 * @desc: */ @ConfigurationProperties(prefix = "springboot.hello") public class HelloProperties { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.springboot.starter; /** * @author:素小暖 * @date:2020/2/9 * @desc: */ public class HelloService { HelloProperties helloProperties; public String hello() { return "hello" + helloProperties.getName(); } public HelloProperties getHelloProperties() { return helloProperties; } public void setHelloProperties(HelloProperties helloProperties) { this.helloProperties = helloProperties; } }
spring.factories文件:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.springboot.starter.HelloAuto
POM文件
<?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.springboot</groupId> <artifactId>spring-boot-starter-autoconfigurer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-starter-autoconfigurer</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </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>
(2) springbootstarter:
启动器比较简单,只有pom文件,引入自动配置便可。
<?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>wms</groupId> <artifactId>springboot-starter</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.springboot</groupId> <artifactId>spring-boot-starter-autoconfigurer</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
五、 测试,新建springboot项目,pom文件中引入启动器
<dependency> <groupId>springboot</groupId> <artifactId>springboot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
application.properties添加配置项
springboot.hello.name=chenzz
测试controller:
package com.springboot.teststarter; import com.wms.starter.HelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @author:素小暖 * @date:2020/2/9 * @desc: */ @RestController public class controller { @Autowired HelloService helloService; @GetMapping("hello") public String hello(){ return helloService.hello(); } }
五、浏览器访问