@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