SpringBoot项目中常见注解
@RequiredArgsConstructor 注解
- 类上添加该注解,
Lombok
会自动生成一个构造函数,用于注入final
或@NonNull
修饰的字段
@ConfigurationProperties注解
- 用于将配置文件中的属性注入到某个类的字段上
sky: jwt: admin-secret-key: itcast admin-ttl: 7200000 admin-token-name: token
@ConfigurationProperties(prefix = \"sky.jwt\")public class JwtProperties { /** * 管理端员工生成jwt令牌相关配置 */ private String adminSecretKey; private long adminTtl; private String adminTokenName;}
注意:配置文件中使用横线而不是下划线 , 如果使用下划线(如 admin_secret_key
), Spring Boot
无法直接将其映射为 adminSecretKey
,需要自定义映射规则.
@ConditionalOnMissingBean注解
用来防止重复注册: 当容器中已存在某个类型的Bean
时,使用此注解可以避免再次注册相同类型的 Bean
,防止Bean
重复定义导致的异常。
示例:
@Configurationpublic class MyServiceConfig { @Bean @ConditionalOnMissingBean(MyService.class) public MyService defaultMyService() { return new DefaultMyServiceImpl(); }}
defaultMyService
方法仅在容器中不存在 MyService
类型的 Bean
时才会被调用,确保容器中只有一个MyService
实例。
@RequestHeader注解
用于从请求头中获取指定的头部字段。直接绑定请求头中的某个参数到方法的参数上。
例如:
@RequestMapping(\"/header\")public String getHeader(@RequestHeader(\"User-Agent\") String userAgent) { return \"User-Agent: \" + userAgent;}
当发送请求时,User-Agent
头部的信息会映射到 userAgent
参数里。
@value注解
主要作用: 从配置文件中注入值
基本使用
- 配置文件:
server: port: 8080
- 注入:
@Value(\"${server.port}\")private String serverPort;
其他用法
如果 config.name
配置项 不存在,则使用 默认值:
@Value(\"${config.name:默认值}\")private String configName;
可以用逗号分隔方式读取数组:
config.names=张三,李四,王五
@Value(\"#{\'${config.names}\'.split(\',\')}\")private List<String> names;
🔹 这样 names
变量的值就是 [\"张三\", \"李四\", \"王五\"]
。
读取操作系统的环境变量 或 Java
系统属性:
@Value(\"${JAVA_HOME}\")private String javaHome;
@Pathvariable注解:
-
@pathvariable
:用于指定路径参数,不带问号的,比如category/1
这种形式. -
下面的url中,id直接以
键值对
形式跟在?
后,明确地说明了这就是id
的值,不用加@pathvariable
注解.
http://localhost:8080/category?id=12345
如果路径参数和方法参数名一致,可以省略括号中的内容:
@PathVariable(\"id\") Long id
@RequestParam注解:
假设请求: http://localhost:8080/greet?name=John
,则参数 name
会被赋值为 \"John\"
:
@GetMapping(\"/greet\")public String greet(@RequestParam String name) { return \"Hello, \" + name;}
@Service注解
该注解应该标注在 实现类上,而不是接口上。