SpringBoot -- 自定义Starter (狂神视频学习笔记)
SpringBoot -- 自定义Starter (狂神视频学习笔记)
-
说明
启动器模块就是一个空的jar文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库
命名规范:
- 官方命名:
- 前缀:spring-boot-starter-xxx
- 比如:spring-boot-starter-web
- 自定义命名:
- xxx-spring-boot-starter
- 比如:Mybatis-spring-boot-starter
- 官方命名:
-
编写启动器
-
在IDEA中新建一个空项目 spring-boot-starter-diy
-
新建一个普通Maven模块:demo-spring-boot-starter
-
新建一个Springboot模块:demo-spring-boot-starter-autoconfigure
-
点击apply即可,基本结构
-
在starter 中 导入 autoconfigure 的依赖
<!-- 启动器 --> <dependencies> <!-- 引入自动配置模块 --> <dependency> <groupId>com.demo</groupId> <artifactId>self-spring-boot-starter-autoconfigure</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
-
在 autoconfigure 项目下,Pom中加入依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> </dependencies>
说明:
第一个依赖 主要是为编译器配置的 可以根据properties 鼠标右键 点到用这个属性的类上个第二个依赖 主要是为了自动装配
-
编写HelloProperties 配置类
// 前缀 demo.hello @ConfigurationProperties(prefix = "demo.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; } }
这里我们要读取的配置就是demo.hello.prefix 和 demo.hello.suffix 的值
@ConfigurationProperties注解的作用就是读取配置文件指定属性的值
-
编写一个自己的服务
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(); } }
-
编写自动配置类并注入bean,测试
@Configuration @ConditionalOnWebApplication //web应用生效 @EnableConfigurationProperties(HelloProperties.class) public class HelloServiceAutoConfiguration { @Autowired HelloProperties helloProperties; @Bean public HelloService helloService(){ HelloService service = new HelloService(); service.setHelloProperties(helloProperties); return service; } }
说明:
@Configuration
标识本类是配置类(相当于spring中application.xml)@EnableConfigurationProperties(HelloProperties.class)
如果 HelloProperties 中有注解@ConfigurationProperties 那么这个类就
会被加到spring上下文的容器中,也就是可以通过@Autowire来注入@ConditionalOnClass
当类路径下有指定类的情况下 才进行下一步@ConditionalOnMissingBean
当spring容器中没有这个Bean的时候才进行下一步 -
在resources编写一个自己的 META-INF\spring.factories
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.demo.config.HelloServiceAutoConfiguration
-
编写完成后,可以安装到maven仓库中
-
项目包结构
-
-
新建项目测试自己写的启动器
-
新建一个SpringBoot 项目(需要引入 web 的启动器)
-
导入我们自己写的启动器
<dependency> <groupId>com.demo</groupId> <artifactId>self-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
-
编写一个 HelloController 进行测试我们自己的写的接口
@RestController public class HelloController { @Autowired HelloService helloService; @RequestMapping("/hello") public String hello(){ return helloService.sayHello("ywb"); } }
-
编写配置文件 application.properties
demo.hello.prefix="Mystarter-perfix--" demo.hello.suffix="--Mystarter-suffix"
-
启动项目进行测试,结果成功
-