SpringBoot第二篇【相关注解】
SpringBoot重要注解
@SpringBootConfiguration
标注在某个类上,表示该类为SpringBoot的配置类
@EnableAutoConfiguration
开启自动配置功能;用此注解才会自动配置
@AutoConfigurationPackage
自动配置包;将主配置类(@SpringBootConfiguration标注的类)所在包及其子包所有组件扫描进Spring容器
Spring重要注解
@ComponentScan
扫描该注解所标注的类所在包及其所有子包进Spring容器,相当于<context:component-scan="xxx"/>
使用方式:
-
自定义扫描路径下被@Controller,@Service,@Repository,@Component注解标注的类进spring容器
-
通过includeFilters扫描路径下没有以上注解标注的类加入spring容器
-
通过excludeFilters扫描路径下有以上注解标注的类不加入spring容器
package com.example.demo;
import com.example.demo.controller.UserController;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
@Configuration
@ComponentScan(value = "com.example.demo",includeFilters = {
@ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE,classes = UserController.class)
})
public class Config {
}
@Configuration
标注在某个类上,表示该类为Spring的配置类;配置类的作用相当于配置文件;配置类也是容器中的一个组件
@Import
给容器导入组件
@ConfigurationProperties
@ConfigurationProperties(prefix="xxx");批量注入配置文件属性;优先级比@Value高
@Value
单个注入属性
@ConfigurationProperties和@Value的区别:
| @ConfigurationProperties | @Value | |
|---|---|---|
| 功能 | 批量注入配置文件中的属性 | 单个注入属性 |
| 松散绑定(松散语法) | 支持 | 不支持 |
| SpEL | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂类型封装 | 支持 | 不支持 |
需要掌握的注解
@Valid
开启校验的功能
| 注解 | 说明 |
|---|---|
| @Null | 限制只能为null |
| @NotNull | 限制必须不为null |
| @AssertFalse | 限制必须为false |
| @AssertTrue | 限制必须为true |
| @DecimalMax(value) | 限制必须为一个不大于指定值的小数 |
| @DecimalMin(value) | 限制必须为一个不小于指定值的小数 |
| @Digits(integer,fraction) | 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction |
| @Future | 验证是否在系统时间之后 |
| @Max(value) | 限制必须为一个不大于指定值的整数 |
| @Min(value) | 限制必须为一个不小于指定值的整数 |
| @Past | 验证是否在系统时间之前 |
| @Pattern(value) | 限制必须符合指定的正则表达式 |
| @Size(max,min) | 限制字符长度必须在min到max之间 |
| @Past | 验证注解的元素值(日期类型)比当前时间早 |
| @NotEmpty | 不为null且长度必须大于0,常用在集合上 |
| @NotBlank | 只能用在字符串上,trim()的情况下长度必须大于0 |
| 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 | |
| @Range | 被注释的元素必须在指定的范围了 |
| @Length | 被注释的字符串长度必须在指定的范围内 |
| @Validated和@Valid的区别: |
@Validated:用在类型、方法和方法参数上。但不能用于成员属性(field)上;提供分组功能(如果@Validated 注解加分组参数,那么会校验对应字段,不校验其他字段);支持排序功能
@Valid:可以用在方法、构造函数、方法参数和成员属性(field)上;不提供分组功能;不支持排序功能
注意事项:
-
校验@ResponseBody参数,参数列表里一定要有@Validation
-
校验@RequestParam,@PathVariable参数,类上一定要有@Validation
-
集合校验
public class ValidationList<E> implements List<E> {
@Delegate // @Delegate是lombok注解
@Valid // 一定要加@Valid注解
public List<E> list = new ArrayList<>();
// 一定要记得重写toString方法
@Override
public String toString() {
return list.toString();
}
}
参考链接:https://itsoku.blog.csdn.net/article/details/108373429
@Conditional
参考链接: https://blog.csdn.net/xcy1193068639/article/details/81491071
@ConitionalOnBean
@ConitonalOnBean({Conitional1.class,Conitional2.class})
spring ioc容器有两个其中之一是bean会注入
@ConitionalOnMissingBean
@ConitonalOnMissingBean({Conitional1.class,Conitional2.class})
spring ioc容器这两个bean都没有才会注入

浙公网安备 33010602011771号