@EnableConfigurationProperties @ConfigurationProperties

news/2024/11/25 11:12:16/

@EnableConfigurationProperties && @ConfigurationProperties的使用时机

今天在写properties时想到了这个问题,为什么有时候我需要写@EnableConfigurationProperties有时候又不需要呢?下面就详细讲讲。

java">@Data
@Component
@ConfigurationProperties(prefix = "hm.auth")
public class AuthProperties {private List<String> includePaths;private List<String> excludePaths;
}@Component
@RequiredArgsConstructor
public class AuthGlobalFilter implements GlobalFilter, Ordered {private final AuthProperties authProperties;private final JwtTool jwtTool;private final AntPathMatcher antPathMatcher = new AntPathMatcher();

可以看到AuthGlobalFilter并没有添加@EnableConfigurationProperties,只是简单的注入就可以使用。

java">@Data
@ConfigurationProperties(prefix = "hm.jwt")
public class JwtProperties {private Resource location;private String password;private String alias;private Duration tokenTTL = Duration.ofMinutes(10);
}@Configuration
@EnableConfigurationProperties(JwtProperties.class)
public class SecurityConfig {@Beanpublic PasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}@Beanpublic KeyPair keyPair(JwtProperties properties){// 获取秘钥工厂KeyStoreKeyFactory keyStoreKeyFactory =new KeyStoreKeyFactory(properties.getLocation(),properties.getPassword().toCharArray());//读取钥匙对return keyStoreKeyFactory.getKeyPair(properties.getAlias(),properties.getPassword().toCharArray());}
}

可以看到JwtProperties没有添加@Component注解,也就是没有注册为 Spring 容器中的 bean。然后SecurityConfig中就添加了@EnableConfigurationProperties(JwtProperties.class)然后在下面方法中通过参数自动注入public KeyPair keyPair(JwtProperties properties)


为什么需要 @EnableConfigurationProperties

  • 默认情况下,使用 @ConfigurationProperties 标注的类不会被自动注册为 Spring 容器中的 bean。
  • 使用 @EnableConfigurationProperties(SecurityConfigProperties.class) 会将该类注册为一个 Spring 管理的 bean,使它能够被自动注入。

因为前面JwtProperties没有添加@Component注解,所以需要添加 @EnableConfigurationProperties。而AuthProperties@Component注解,也就是已经被spring管理了,所以不需要额外添加。


简化方式: 如果 SecurityConfigProperties 类本身已经用 @Component 标注,则无需额外使用 @EnableConfigurationProperties

示例:

@Component
@ConfigurationProperties(prefix = "security")
public class SecurityConfigProperties {// 属性和 Getter/Setter 同前
}

在这种情况下,@EnableConfigurationProperties 就变得非必需。


但是如果为了更加稳妥可以把这两个注解全部都加上。@Configuration@Component 都可以使其被spring容器管理。

java">@Slf4j
@Data
@ConfigurationProperties(prefix = "zzyl.framework.security")
@Configuration
public class SecurityConfigProperties {
}@Configuration
@EnableConfigurationProperties(SecurityConfigProperties.class)
public class SecurityConfig  {@AutowiredSecurityConfigProperties securityConfigProperties;@AutowiredJwtAuthorizationManager jwtAuthorizationManager;

http://www.ppmy.cn/news/1549808.html

相关文章

关于图论建模的一份介绍

图论是离散数学的一部分&#xff0c;主要研究点与线所组成的形状。不过它们并非与几何中的图形类似&#xff0c;而是一种抽象化的产物&#xff0c;因此&#xff0c;我们可以通过这种方式来将一些生活、生产等中的问题进行建模&#xff0c;然后用数学规划等方式解决。所以&#…

docker学习笔记跟常用命令总结

Docker简介 Docker是一个用于构建运行传送应用程序的平台 镜像 将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜 镜像结构 镜像管理命令 命令说明docker pull拉取镜像docker push推送镜像docker images查看本地镜像docker rmi删除本地镜像docker image prune…

LLMops产品介绍

文章目录 字节跳动的扣子优点低代码开发丰富的插件与能力扩展强大的记忆与数据交互能力应用场景广泛 不足模型选择相对受限定制化程度受限输出效果有待提高应用部署范围有限市场认知度和用户基础不足 开悟大模型运营管理系统&#xff08;LLMOPS&#xff09;优点全生命周期管理降…

初识线程池

目录 初识线程池为什么要引入线程池标准库中的线程池代码演示创建线程池的时候&#xff0c;设置多少个线程合适&#xff1f;&#xff1f; 初识线程池 池 是一个非常重要的概念 你可能听说过 池化技术 常量池、数据库连接池、线程池、进程池、内存池… 为什么要引入线程池 最开…

IDEA优雅debug

目录 引言一、断点分类&#x1f384;1.1 行断点1.2 方法断点1.3 属性断点1.4 异常断点1.5 条件断点1.6 源断点1.7 多线程断点1.8 Stream断点 二、调试动作✨三、Debug高级技巧&#x1f389;3.1 watch3.2 设置变量3.3 异常抛出3.4 监控JVM堆大小3.5 数组过滤和筛选 引言 使用ID…

设计模式——前端控制器模式

定义与概念 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是一种软件设计模式&#xff0c;主要用于集中处理 Web 应用或其他多层架构应用的请求。它作为一个单一的入口点来接收和处理所有的客户端请求&#xff0c;将请求分发给相应的处理模块&#xff0c;从…

【Spring源码核心篇-03】精通spring的aop的底层原理和源码实现

Spring源码核心篇整体栏目 内容链接地址【一】Spring的bean的生命周期https://zhenghuisheng.blog.csdn.net/article/details/143441012【二】深入理解spring的依赖注入和属性填充https://zhenghuisheng.blog.csdn.net/article/details/143854482【三】精通spring的aop的底层原…

移动光猫[HS8545M5-10]获取超密

移动光猫[HS8545M5-10]获取超级密码 1、缘由2、前期准备2.1、确保本地开通telnet客户端功能2.2、准备好相关软件 3、开始查找超密 1、缘由 最近想折腾一下ipv6ddns打通内外网&#xff0c;查询资料说是需要将光猫桥接到外网&#xff1b;但是使用光猫后边的用户名密码根本就找不到…