1,如何自定义 ①,我们首先要有一个意识,springboot自己适配的一般以:spring-boot-starter-xxx命名,比如:spring-boot-starter-amqp ②,自己去适配springboot一般以:xxx-spring-boot-starter命名,比如:mybatis-spring-boot-starter ③,springboot自动适配的在依赖时一般不用加版本号,自动适配springboot 的需要版本号。因为sprinboot根本就不知道它的版本 ③,通过观察mybatis-spring-boot-starter,我们发现mybatis-spring-boot-starter并没有java代码,通过观察其pom.xml我们发现,它引入了mybatis-spring-boot-autoconfigure ④,所以我们可以仿照mybatis自定义我们的starter
2,创建工程①,创建一个空的mystart工程,新建两个模块,1,mystart;2,autoconfigurable
3,mystart模块配置
①,mystart依赖于autoconfigurable模块 - <groupId>com.spring.start</groupId>
- <artifactId>mystart</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>com.spring.start.autoconfigurable</groupId>
- <artifactId>autoconfigurable</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
- </dependencies>
复制代码
4,autoconfigurable工程代码①,pom.xml - <groupId>com.spring.start.autoconfigurable</groupId>
- <artifactId>autoconfigurable</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>autoconfigurable</name>
- <description>Demo project for Spring Boot</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.0.RELEASE</version>
- </parent>
- <dependencies>
- <--依赖于springboot starter-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- </dependency>
- </dependencies>
复制代码②,编写xxxProperties类,类似于ServerProperties - import org.springframework.boot.context.properties.ConfigurationProperties;
- //这样才能读取到application.properties 中的相应配置
- @ConfigurationProperties("spring.su")
- public class SuProperties {
- 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;
- }
- }
复制代码③,编写功能类 - public class SuService {
- //这里不用@Autowired注入,会在自动配置类注入时给设置,所以才有setSuProperties 方法
- private SuProperties suProperties;
- public String hello(String name){
- return suProperties.getPrefix()+"--"+name+"=="+suProperties.getSuffix();
- }
- public SuProperties getSuProperties() {
- return suProperties;
- }
- public void setSuProperties(SuProperties suProperties) {
- this.suProperties = suProperties;
- }
- }
复制代码④,编写自动配置类 - import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- //是个配置类
- @Configuration
- //在web应用中起效
- @ConditionalOnWebApplication
- //指明配置类,这样SuProperties 才能被注入
- @EnableConfigurationProperties({SuProperties.class})
- public class SuAutoConfiguration {
- @Autowired
- private SuProperties suProperties;
- @Bean
- public SuService suService(){
- SuService suService = new SuService();
- suService.setSuProperties(suProperties);
- return suService;
- }
- }
复制代码⑤,添加对应的 META-INF/spring.factories ⑥,spring.factories 内容,这样springboot在启动时会就扫描对应的AutoConfiguration - org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.spring.start.autoconfigurable.SuAutoConfiguration
复制代码
5,mystart工程代码①,pom.xml 依赖于autoConfiguration 工程即可 - <groupId>com.spring.start</groupId>
- <artifactId>mystart</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>com.spring.start.autoconfigurable</groupId>
- <artifactId>autoconfigurable</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
- </dependencies>
复制代码
6,测试工程代码编写①,pom.xml - <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.0.RELEASE</version>
- </parent>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <--依赖mystart 即可,mystart 会依赖autoconfigurable 工程,注意这里要指定版本号-->
- <dependency>
- <groupId>com.spring.start</groupId>
- <artifactId>mystart</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
复制代码②,application.properties - spring.su.prefix=小美女
- spring.su.suffix=错过了
复制代码③,测试类 - import com.spring.start.autoconfigurable.SuService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- @RestController
- public class HomeController {
- @Autowired
- private SuService suService;
- @RequestMapping("/")
- public String index(){
- return suService.hello("小苏");
- }
- }
复制代码④,启动工程,然后测试即可, ⑤,遗留问题,在application.properties 写的中文会乱码,暂时没有找到解决的办法,知道如何的同学欢迎留言,感谢!!!
|