zoukankan      html  css  js  c++  java
  • 【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容器中是否已存在配置好的自定义配置信息。亲测有效!

     

  • 相关阅读:
    数组的学习(一)
    Servlet是线程安全吗?
    MySql用户管理:添加用户、授权、删除用户
    泛型(二)
    泛型(一)
    Spring MVC
    spring框架
    mybatis基础
    Hibernate 基础
    Java局部类
  • 原文地址:https://www.cnblogs.com/wjqhuaxia/p/14615126.html
Copyright © 2011-2022 走看看