zoukankan      html  css  js  c++  java
  • springboot自定义自配置类

    springboot自定义自配置类

    需求:当某个类存在的时候,自动配置这个类的bean,并可将bean的属性在application.properties中配置

    1、导包

    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-autoconfigure -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.3.4.RELEASE</version>
    </dependency>
    

    2、自定义start的配置文件(仿照HttpProperties)

    package com.yl.properties;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @ConfigurationProperties(prefix = "my.properties")//将配置文件中指定前缀(my.properties)的值映射到当前类
    public class MyProperties {
        private MyProperties.Properties properties=new MyProperties.Properties();
    
        public MyProperties() {
        }
    
        public Properties getProperties() {
            return properties;
        }
    
        public void setProperties(Properties properties) {
            this.properties = properties;
        }
    
        public static class Properties{
            public static final String DEFAULT_NAME;//默认值,也可以在配置文件自定义值
            private String name;
            private String age;
    
            static {
                DEFAULT_NAME="yl";
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public String getAge() {
                return age;
            }
    
            public void setAge(String age) {
                this.age = age;
            }
    
        }
    }
    

    3、配置文件注入属性值

    my:
      properties:
        properties:
          age: 18
          name: yl
    

    4、判断依据类

    对应需求中的某个类,作为判断依据类,如果存在则创建这个类的bean

    package com.yl.bean;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class MyClass {
        private String name;
        private String age;
    }
    

    4、自动配置类

    package com.yl.configration;
    
    import com.yl.bean.MyClass;
    import com.yl.properties.MyProperties;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @EnableConfigurationProperties(MyProperties.class)//使@ConfigurationProperties注解的类生效。
    @ConditionalOnClass(MyClass.class)//当前类路径下有指定类(MyClass)的条件下启动自配置
    //指定的属性是否有指定的值,当matchIfMissing为true时,配置文件缺少value或name对应的属性值也会注入成功
    @ConditionalOnProperty(prefix = "my.properties",value = "enabled",matchIfMissing = true)
    public class MyAutoConfigration {
        private MyProperties.Properties properties;
    
        public MyAutoConfigration(MyProperties properties) {
            this.properties = properties.getProperties();
        }
    
        @Bean
        @ConditionalOnMissingBean(MyClass.class)//当容器里没有指定bean(MyClass)时配置bean
        public MyClass person(){
            MyClass myClass =new MyClass();
            myClass.setName(properties.getName());
            myClass.setAge(properties.getAge());
    
            return myClass;
        }
    }
    

    5、注册自动配置类

    在resource下创建META-INF文件夹,在此文件夹下创建spring.factories文件

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
    com.yl.configration.MyAutoConfigration  # 自动配置类全限定类名
    

    6、测试

    package com.yl.controller;
    
    import com.yl.bean.MyClass;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class TestController {
        @Autowired
        private MyClass myClass;
    
        @RequestMapping("/testAutoConfigration")
        @ResponseBody
        public MyClass testAutoConfigration(){
            return myClass;
        }
    
    }
    

    参考资料:https://segmentfault.com/a/1190000020264520?utm_source=tag-newest

    记得快乐
  • 相关阅读:
    CSS实现字母全大写
    人生职业规划与自身设想
    关于人生的一些想法,和淘客SEO的思想。
    保持积极向上的心态去把傻逼的坚持换成牛逼的结果
    SEO站群随想,及自我的认知和想法
    我是SEOer,我为自己代言
    打印出 html结构中的ul li
    js数据类型转换
    js object类型转换 内存泄漏 垃圾回收机制
    页面重置样式reset.css
  • 原文地址:https://www.cnblogs.com/Y-wee/p/14038166.html
Copyright © 2011-2022 走看看