Java注解的作用
·
一、Spring Boot 启动与配置
| 注解 | 作用 |
|---|---|
@SpringBootApplication |
启动整个 Spring Boot 项目,一个顶仨 |
@Configuration |
告诉 Spring:这个类是配置文件,里面可以定义 Bean |
@ComponentScan |
告诉 Spring 去哪个包下找你写的组件(@Service、@Controller 等) |
@Bean |
把方法的返回值交给 Spring 管理,变成一个可注入的对象 |
@Import |
引入其他配置类,让它们生效 |
@Profile("dev") |
这个类/方法只在 dev 环境下才生效 |
@ConditionalOnProperty |
配置文件里某个属性满足条件,才注册这个 Bean |
二、Spring 组件注册
| 注解 | 作用 |
|---|---|
@Component |
标记这个类是个 Spring 组件,让 Spring 自动创建对象管理 |
@Service |
标记这个类是业务层,和 @Component 功能一样,但语义上告诉你"这是做业务的" |
@Repository |
标记这个类是数据访问层,还能自动把数据库异常转成 Spring 的异常 |
@Controller |
标记这个类是控制器,负责接收前端请求(传统网页用) |
@RestController |
= @Controller + @ResponseBody,返回值直接当 JSON 返回(前后端分离必用) |
@Scope("prototype") |
默认每次注入是同一个对象,加了这个每次注入都是新对象 |
三、Spring 依赖注入
| 注解 | 作用 |
|---|---|
@Autowired |
Spring 自动帮你找到对应的对象,塞进这个变量里(按类型找) |
@Resource |
和 @Autowired 一样是自动注入,但它优先按名字找,找不到再按类型找 |
@Qualifier |
配合 @Autowired 使用,当同类型有多个 Bean 时,指定注入哪一个 |
@Primary |
同类型有多个 Bean 时,标记这个是默认优先注入的 |
@Value("${key}") |
从 application.yml 配置文件里读值,塞到这个变量里 |
@RequiredArgsConstructor |
Lombok 自动生成一个构造器,final 字段自动注入,替代 @Autowired |
四、Spring MVC 请求处理
| 注解 | 作用 |
|---|---|
@RequestMapping |
把一个 URL 路径绑定到某个方法上,前端访问这个路径就走这个方法 |
@GetMapping |
只接收 GET 请求(查数据用) |
@PostMapping |
只接收 POST 请求(新增数据用) |
@PutMapping |
只接收 PUT 请求(修改数据用) |
@DeleteMapping |
只接收 DELETE 请求(删除数据用) |
@PathVariable |
从 URL 路径里取值,比如 /user/123 里的 123 |
@RequestParam |
从 ? 后面的查询参数取值,比如 ?page=1&size=10 |
@RequestBody |
把前端传的 JSON 数据自动转成 Java 对象 |
@RequestHeader |
从请求头里取值,比如取 Token |
@ModelAttribute |
把表单数据绑定到对象上 |
@RestControllerAdvice |
= @ControllerAdvice + @ResponseBody,全局统一处理所有 Controller 的异常和返回值 |
五、Spring AOP(面向切面编程)
| 注解 | 作用 |
|---|---|
@Aspect |
标记这个类是个切面类,用来统一处理公共逻辑(日志、事务、权限等) |
@Pointcut |
定义一个切入点,告诉 Spring "哪些方法需要被拦截" |
@Before |
在目标方法执行之前执行的代码 |
@After |
在目标方法执行之后执行(不管成功失败都执行) |
@Around |
在目标方法前后都执行,最强大,可以决定方法要不要执行 |
@AfterReturning |
目标方法正常返回后执行 |
@AfterThrowing |
目标方法抛异常后执行 |
六、Spring 事务
| 注解 | 作用 |
|---|---|
@Transactional |
方法里的数据库操作要么全成功,要么全回滚,不会出现数据一半成功一半失败 |
常见参数:
rollbackFor = Exception.class→ 遇到任何异常都回滚(不加的话只回滚 RuntimeException)readOnly = true→ 告诉数据库"我只查不改",做个性能优化propagation = REQUIRED→ 当前有事务就加入,没有就新建(默认行为)
七、Spring 缓存
| 注解 | 作用 |
|---|---|
@EnableCaching |
开启缓存功能,不加这个下面的注解都不生效 |
@Cacheable |
执行方法前先看 Redis 里有没有,有就直接返回,不走方法体(查缓存) |
@CachePut |
不管缓存有没有,方法都执行,然后把结果写进缓存(更新缓存) |
@CacheEvict |
方法执行后,把指定缓存删掉(清除缓存) |
八、Spring 安全
| 注解 | 作用 |
|---|---|
@EnableWebSecurity |
开启 Spring Security 安全框架 |
@PreAuthorize |
方法执行之前检查权限,没权限就不让执行 |
@Secured |
和 @PreAuthorize 类似,但功能更简单,只能判断角色 |
九、Spring 定时任务
| 注解 | 作用 |
|---|---|
@EnableScheduling |
开启定时任务功能 |
@Scheduled |
让方法按规则自动执行:fixedRate=每隔多久、cron=按日历规则 |
十、MyBatis 数据库
| 注解 | 作用 |
|---|---|
@Mapper |
标记这个接口是 MyBatis 的 Mapper,Spring 会自动生成实现类 |
@MapperScan |
告诉 Spring 去哪个包下找所有 Mapper 接口 |
@Select / @Insert / @Update / @Delete |
直接在接口方法上写 SQL,不用写 XML |
@Param |
方法有多个参数时,给每个参数起个名字,SQL 里用 #{名字} 引用 |
@TableName |
告诉 MyBatis-Plus 这个类对应数据库哪张表 |
@TableId |
标记哪个字段是主键 |
@TableField |
标记字段和数据库列的对应关系 |
十一、Java Bean 校验
| 注解 | 作用 |
|---|---|
@Valid |
放在参数上,触发校验,不通过就抛异常(必须配合 @NotNull 等一起用) |
@NotNull |
这个值不能是 null |
@NotBlank |
这个字符串不能是 null、不能是空串 ""、不能全是空格 " " |
@NotEmpty |
字符串/集合/Map 不能为空(和 @NotBlank 比,它允许全是空格) |
@Size |
长度/个数必须在指定范围内 |
@Min / @Max |
数值必须在指定范围内 |
@Email |
必须是合法的邮箱格式 |
@Pattern |
必须符合你写的正则表达式 |
十二、Lombok 简化代码
| 注解 | 作用 |
|---|---|
@Data |
自动帮你生成 getter、setter、toString、equals、hashCode,省得手写 |
@Getter / @Setter |
只生成 getter 或只生成 setter |
@ToString |
只生成 toString 方法 |
@EqualsAndHashCode |
只生成 equals 和 hashCode 方法 |
@NoArgsConstructor |
自动生成无参构造器 |
@AllArgsConstructor |
自动生成全参构造器 |
@RequiredArgsConstructor |
自动给 final 字段生成构造器(常用于替代 @Autowired) |
@Builder |
自动给你一个 builder 模式,方便创建对象 |
@Slf4j |
自动创建一个叫 log 的日志对象,直接用 log.info() 打日志 |
十三、Java 原生注解
| 注解 | 作用 |
|---|---|
@Override |
告诉编译器"我是重写父类方法",写错了方法名编译器会报错提醒你 |
@Deprecated |
标记这个方法/类已经过时了,别人调用会有删除线警告 |
@SuppressWarnings |
压制编译器警告,比如"我知道这里有未使用变量,别提醒我了" |
@FunctionalInterface |
标记这是函数式接口(只有一个抽象方法),可以用 Lambda 表达式 |
@Inherited |
子类会继承父类的这个注解 |
@Repeatable |
这个注解可以在同一个地方写多次 |
更多推荐
所有评论(0)