学习在IDEA中使用SpringBoot(八)Spring Boot 与自定义starter

1.自定义starter需要注意的两个问题

  • 这个场景需要使用的依赖是什么
  • 如何编写自动配置

结合SpringBoot自动配置的经验大致要做的事情有下面这些:

    @Configuration  //指定这个类是一个配置类
    @ConditionalOnXXX  //在指定条件成立的情况下自动配置类生效
    @AutoConfigureAfter  //指定自动配置类的顺序
    @Bean  //给容器中添加组件
     
    @ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
    @EnableConfigurationProperties //让xxxProperties生效加入到容器中
     
     
     
     
    自动配置类要能加载
    将需要启动就加载的自动配置类,配置在META-INF/spring.factories
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,

2.模式

启动器只用来做依赖导入

专门来写一个自动配置模块

启动器依赖自动配置模块,别人只需要引入启动器(starter)

  • 命令规则:
    • 官方命名

      • 前缀:”spring-boot-starter-”
      • 模式:spring-boot-starter-模块名
      • 举例:spring-boot-starter-web、spring-boot-starter-jdbc
    • 自定义命名

      • 后缀:”-spring-boot-starter”

      • 模式:模块名-spring-boot-starter

      • 举例:mybatis-spring-boot-starter

3.自定义starter

  1. 首先建立两个项目,

    一个做启动器,什么都不写,只导入关于配置组件的依赖

    另一个项目做配置模块

    (1)创建一个空工程
    在这里插入图片描述
    (2) 在空工程创建一个maven工程作为启动器
    在这里插入图片描述
    (3)再创建一个spring Initializr作自动配置,不选取任何starter直接创建
    在这里插入图片描述
    (4)选中应用后点击ok

  2. 启动器:
    只需要在第一个项目中的pom.xml文件中引入配置组件的依赖即可,同时删掉build跟test依赖。其他的任何操作都不需要

     <?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.itstudy.starter</groupId>
         <artifactId>itstudy-spring-boot-starter</artifactId>
         <version>1.0-SNAPSHOT</version>
      
      
         <dependencies>
             <!-- 引入自动配置模块 -->
             <dependency>
                 <groupId>com.itstudy.starter</groupId>
                 <artifactId>itstudy-spring-boot-starter-autoconfigure</artifactId>
                 <version>0.0.1-SNAPSHOT</version>
             </dependency>
         </dependencies>
      
     </project>
    

3.配置模块
(1)首先在pom.xml中引入springboot的starter,这是所有的starter的基本配置

    <dependencies>
        <!-- 引入springboot的starter:所有starter的基本配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

(2)然后创建一个xxxProperties类用来放配置参数

    @ConfigurationProperties(prefix = "itstudy.hello")
    public class HelloProperties {
        private String prefix;
        private String surfix;
     
     
        public String getPrefix() {
            return prefix;
        }
     
        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }
     
        public String getSurfix() {
            return surfix;
        }
     
        public void setSurfix(String surfix) {
            this.surfix = surfix;
        }
    }

(3)然后创建xxxAutoConfiguration用作自动配置类,并自动配置刚刚的xxxProperties类,并给xxxService设置上导入的xxxProperties类

@Configuration
	@ConditionalOnWebApplication     // web应用才生效
	@EnableConfigurationProperties(HelloProperties.class)   // 让这个属性文件生效
	public class HelloServiceAutoConfiguration {
	 
	    @Autowired
	    HelloProperties helloProperties;
	 
	    @Bean
	    public HelloService helloService(){
	        HelloService helloService = new HelloService();
	        helloService.setHelloProperties(helloProperties);
	        return helloService;
	    }
	}

(4)创建xxxService类用作业务实现类

public class HelloService {
    HelloProperties helloProperties;
 
 
    public String sayHello(String name){
        return helloProperties.getPrefix() + "-" + name + "-" + helloProperties.getSurfix();
    }
 
 
    public HelloProperties getHelloProperties() {
        return helloProperties;
    }
 
    public void setHelloProperties(HelloProperties helloProperties) {
        this.helloProperties = helloProperties;
    }
}

(5)在resources下创建META-INF目录,并创建spring.factories,并配置刚刚的xxxAutoConfiguration类

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.itstudy.starter.HelloServiceAutoConfiguration

(6)将两个包安装到Maven仓库即可

4.测试starter

  1. 创建一个新项目,导入依赖

     <dependency>
         <groupId>com.itstudy.starter</groupId>
         <artifactId>itstudy-spring-boot-starter</artifactId>
         <version>1.0-SNAPSHOT</version>
     </dependency>
    
  2. 使用starter中的xxxService

     @RestController
     	public class HelloController {
     	    @Autowired
     	    HelloService helloService;
     	 
     	    @GetMapping("/hello")
     	    public String hello(){
     	        return helloService.sayHello("hahahaha");
     	    }
     	}
    
  3. 在配置文件中设置xxxProperties的参数

     itstudy.hello.prefix=A
     itstudy.hello.surfix=B
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值