@ConfigurationProperty

@Configuration
@EnableConfigurationProperties({SpringBootProperties.class})
public class SpringBootAutoConfiguration {


    /**
     * 权限拦截器
     *
     * @return
     */
    @Bean
    @ConditionalOnMissingBean
    public LoginInterceptor loginInterceptor() {
        LoginInterceptor loginInterceptor = new LoginInterceptor();
        return loginInterceptor;
    }
}

@Data
@ConfigurationProperties(prefix = "spring-boot")
public class SpringBootProperties {

    /**
     * 拦截器配置
     */
    private LoginInterceptorConfig loginInterceptorConfig;


    /**
     * 登录拦截器配置
     */
    @Data
    public static class LoginInterceptorConfig {

        /**
         * 权限拦截器排除路径
         */
        private PermissionConfig permissionConfig;

    }

    @Data
    public static class PermissionConfig {

        /**
         * 排除路径
         */
        private String[] excludePath;

        /**
         * 包含的路径
         */
        private String[] includePath;

    }
}

如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。
说白了 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。下面这种方式也行

@Data
@Configuration
@ConfigurationProperties(prefix = "spring-boot")
public class SpringBootProperties {

    /**
     * 拦截器配置
     */
    private LoginInterceptorConfig loginInterceptorConfig;


    /**
     * 登录拦截器配置
     */
    @Data
    public static class LoginInterceptorConfig {

        /**
         * 权限拦截器排除路径
         */
        private PermissionConfig permissionConfig;

    }

    @Data
    public static class PermissionConfig {

        /**
         * 排除路径
         */
        private String[] excludePath;

        /**
         * 包含的路径
         */
        private String[] includePath;

    }
}

注意上叙SpringBootProperties中的负杂类型如果使用内部类只能用静态类,否则复杂属性赋值失败。如果不使用内部类则在复杂属性上方添加@NestedConfigurationProperty

posted @ 2022-02-21 21:10  guardWei  阅读(271)  评论(0编辑  收藏  举报