【springboot】自定义启动器

本文只对springboot自定义启动器的具体实现进行描述,不涉及springboot自动装配原理的介绍。

对springboot自动配置原理感兴趣的请移步

狂神说SpringBoot02:运行原理初探

【springboot】自动装配原理

springboot自定义启动器的实现步骤如下:

 第一步:引入spring-boot-autoconfigure包依赖

  在创建好的maven工程在pom中引入spring-boot-autoconfigure的依赖,即需要使用springboot的自动配置能力。

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>    

第二步:新建自动配置类xxxAutoConfiguration

  新建自动配置类xxxAutoConfiguration,类上加注解@Configuration指定为配置类,加@ConditionalOnClass注解指定在classpath路径下有指定的class类时才实例化bean同时,配置类中增加方法创建需要bean类例,需加上注解@Bean和@ConditionalOnMissingBean,此注解表示只有在spring容器中没有对应bean实例时进行bean的创建。 

配置类如下:

package cn.com.wjqhuaxia;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author wjqhuaxia
 * @create 2021-03-29 8:12
 *
 * 自定义springboot starter的步骤如下:
 * 1.在创建maven工程时,在pom中引入spring-boot-autoconfigure的依赖,即需要使用springboot的自动配置能力
 * 2.新建自动配置类xxxAutoConfiguration,类上加注解@Configuration指定为配置类,加@ConditionalOnClass注解指定在classpath路径下有
 *   指定的class类时才实例化bean
 *   同时,配置类中增加方法创建需要的bean类例,需加上注解@Bean和@ConditionalOnMissingBean,此注解表示只有在spring容器中没有对应bean
 *   实例时进行bean的创建
 * 3.在项目中的resources目录下新建META-INF文件夹,并新spring.factories文件,在文件中指定上一步中写好的配置类
 *   如:org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.com.wjqhuaxia.TestAutoConfiguration
 * --------------- 此时,已完成springboot的启动器自定义配置 -----------------------------
 * 4.使用时直接从spring容器中取出配置好的bean即可。
 *
 */
@Configuration
@ConditionalOnClass({StarterTest.class})
public class TestAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean(StarterTest.class)
    public StarterTest starterTest(){
        StarterTest starterTest = new StarterTest();
        return starterTest;
    }
}

自动配置的目标类如下:

package cn.com.wjqhuaxia;

/**
 * 自动配置的-->目标类
 * @author wjqhuaxia
 * @create 2021-03-29 8:10
 */
public class StarterTest {


    public String test(String name){
        System.out.println("This is my starter! " + name);
        return "This is my starter! " + name;
    }
}

第三步:spring.factories文件中指定上一步中写好的配置类

  在项目中的resources目录下新建META-INF文件夹,并新建spring.factories文件,在文件中指定上一步中写好的配置类

如:org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.com.wjqhuaxia.TestAutoConfiguration

 

 此时,已完成springboot的启动器自定义配置

以下为测试类:

package cn.com.wjqhuaxia;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author wjqhuaxia
 * @create 2021-03-29 9:35
 */
@SpringBootApplication
public class Application {


    @Autowired
    private StarterTest starterTest;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @RestController
    public class EchoController {

        @GetMapping(value = "/echo/{name}")
        public String echo(@PathVariable String name) {
            return starterTest.test(name);
        }
    }
}

  启动项目并进行测试,即可测试spring容器中是否已存在配置好的自定义配置信息。亲测有效!

 

 

 

 

posted @ 2021-04-03 22:04  天际星痕  阅读(751)  评论(0编辑  收藏  举报