Spring中常用注解

Spring中常用注解

控制器注解

  • @Controller:用于标识控制器类,处理用户请求。
  • @RestController:与 @Controller 类似,但是自带 @ResponseBody,常用于返回 JSON 格式的数据。

1、请求映射注解

  • @RequestMapping:用于映射请求 URL 和处理方法,可以用于类和方法级别。
  • @GetMapping:用于映射 HTTP GET 请求。
  • @PostMapping:用于映射 HTTP POST 请求。
  • @PutMapping:用于映射 HTTP PUT 请求。
  • @DeleteMapping:用于映射 HTTP DELETE 请求。
  • @PatchMapping:用于映射 HTTP PATCH 请求。

2、参数绑定注解

  • @PathVariable:用于将 URL 中的占位符参数绑定到处理方法的参数中。
  • @RequestParam:用于将请求参数绑定到处理方法的参数中。
  • @RequestBody:用于将请求体中的数据绑定到处理方法的参数中。
  • @RequestHeader:用于将请求头中的数据绑定到处理方法的参数中。
  • @CookieValue:用于将 Cookie 中的数据绑定到处理方法的参数中。
  • @ModelAttribute:用于将请求参数绑定到模型对象中,常用于表单数据的提交和验证。
  • @SessionAttribute:用于将模型对象的属性暂存到会话中,方便多个请求之间共享数据。

3、响应视图注解

  • @ResponseBody:用于将处理方法的返回值转换为指定格式的响应数据,常用于返回 JSON 格式的数据。
  • @ModelAttribute:用于将模型对象的属性暂存到会话中,方便多个请求之间共享数据。
  • @SessionAttributes:用于将模型对象的属性暂存到会话中,方便多个请求之间共享数据。
  • @ResponseStatus:用于指定处理方法的响应状态码和原因短语,常用于请求出现异常时返回错误码。

4、其他注解

  • @Autowired:用于自动装配依赖对象,常用于实现依赖注入。
  • @Qualifier:用于指定依赖对象的名称,常用于解决多个同类型依赖对象的注入问题。
  • @Component:用于标识组件类,被 Spring 自动扫描并装配。
  • @Service:用于标识服务类,通常作为业务逻辑的实现类。
  • @Repository:用于标识数据访问对象类,通常与 DAO 层的实现类对应。
  • @Transactional:用于指定事务的处理方式,常用于控制事务的提交和回滚。
  • @InitBinder:用于注册表单属性编辑器或格式化器,用于处理表单数据的绑定和格式化。
  • @Valid:用于开启参数验证功能,可以结合 javax.validation 包中的注解进行参数验证。
  • @ExceptionHandler:用于捕获处理方法中抛出的异常,并进行统一的异常处理,可以指定处理的异常类型和返回的视图或数据。
  • @Async:用于指定方法为异步方法,常用于提高系统的并发性能。
  • @Scheduled:用于指定方法为定时任务,常用于实现定时任务的调度。
  • @Value:用于注入配置属性值,常用于获取配置文件中的属性值。
  • @DateTimeFormat 转换前端传来的日期格式
  • @SpringBootApplication:该注解是Spring Boot项目的入口注解,可以替代@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解。其中,@Configuration用于定义配置类,@EnableAutoConfiguration用于自动配置Spring上下文,@ComponentScan用于自动扫描Bean组件。@SpringBootApplication可以将这三个注解合并到一起,简化了Spring Boot项目的配置。
  • @EnableAutoConfiguration:该注解用于自动配置Spring上下文,根据项目中的依赖自动配置项目所需的Bean组件。其中,@EnableAutoConfiguration是基于Spring Boot的starter机制实现的,通过starter机制可以自动引入所需的依赖,例如,引入了spring-boot-starter-web依赖后,就可以自动配置Spring MVC所需的Bean组件。
  • @ConfigurationProperties:该注解用于从配置文件中读取配置值,可以用在配置类上,用于注入配置值。例如,@ConfigurationProperties(prefix = “app”) public class AppConfig {}可以将配置文件中以app为前缀的属性值注入到AppConfig类中。
  • @EnableAsync:该注解用于启用异步处理,可以用在配置类上,用于开启异步处理的功能。例如,@Configuration @EnableAsync public class AppConfig {}可以开启异步处理的功能。
  • @EnableScheduling:该注解用于启用定时任务,可以用在配置类上,用于开启定时任务的功能。例如,@Configuration @EnableScheduling public class AppConfig {}可以开启定时任务的功能。
  • @SpringBootTest:该注解用于测试Spring Boot应用程序,可以用在测试类上,用于启动Spring Boot应用程序并测试其功能。例如,@SpringBootTest public class UserServiceTest {}可以测试UserService类的功能。
  • @JsonInclude:该注解用于序列化Java对象为JSON格式时,控制序列化的包含和排除规则。例如,@JsonInclude(JsonInclude.Include.NON_NULL)表示只序列化非空属性。
  • @Scope注解是用于指定Bean的作用域的注解。在Spring框架中,Bean可以具有不同的作用域,例如,单例(Singleton)、原型(Prototype)、会话(Session)和请求(Request)等。通过在Bean类或Bean定义上添加@Scope注解,可以指定Bean的作用域。
  • @PreAuthorize:在方法执行之前对用户进行访问控制检查。通过在方法或类上使用 @PreAuthorize
    注解,可以在方法执行之前定义访问控制规则,以限制哪些用户可以访问该方法。

扩展

1、@Scope注解

singleton:该属性指定Bean为单例模式,即在Spring上下文中只存在一个Bean实例。默认值为singleton。

prototype:该属性指定Bean为原型模式,即在每次请求时都会创建一个新的Bean实例。每个Bean实例都有自己的属性值和状态。

request:该属性指定Bean为请求模式,即在Web应用程序中,每个HTTP请求都会创建一个新的Bean实例。每个请求中使用的Bean实例都有自己的属性值和状态,不同请求中的Bean实例是相互独立的。

session:该属性指定Bean为会话模式,即在Web应用程序中,每个HTTP会话都会创建一个新的Bean实例。每个会话中使用的Bean实例都有自己的属性值和状态,不同会话中的Bean实例是相互独立的。

globalSession:该属性指定Bean为全局会话模式,仅在Portlet环境下使用。全局会话模式与会话模式类似,但是全局会话是跨多个Portlet和多个HTTP请求的,因此它可以在整个Web应用程序中共享数据。
使用@Scope注解可以控制Bean的生命周期和作用域,从而更好地管理Bean。例如,对于一些需要频繁创建和销毁的Bean,可以使用prototype模式,减少内存占用和资源浪费;对于一些需要共享状态的Bean,可以使用singleton模式,保证Bean的状态一致性。

2、@PreAuthorize注解

@PreAuthorize 注解的常用参数如下:

  1. value:定义访问控制规则的 SpEL 表达式。
  2. condition:定义访问控制规则的 SpEL 表达式。与 value 参数类似,它们的作用相同,只是名称不同。
  3. hasRole:检查当前用户是否拥有指定的角色。例如:@PreAuthorize(“hasRole(‘ROLE_ADMIN’)”),表示只有拥有 ROLE_ADMIN 角色的用户才能访问该方法。
  4. hasAnyRole:检查当前用户是否拥有指定的任意一个角色。例如:@PreAuthorize(“hasAnyRole(‘ROLE_ADMIN’,‘ROLE_USER’)”) 表示只有拥有 ROLE_ADMIN 或 ROLE_USER 角色的用户才能访问该方法。
  5. hasAuthority:检查当前用户是否拥有指定的权限。例如:@PreAuthorize(“hasAuthority(‘READ_ONLY’)”)表示只有拥有 READ_ONLY 权限的用户才能访问该方法。
  6. hasAnyAuthority:检查当前用户是否拥有指定的任意一个权限。例如@PreAuthorize(“hasAnyAuthority(‘READ_ONLY’,‘WRITE_ONLY’)”) 表示只有拥有 READ_ONLY 或 WRITE_ONLY 权限的用户才能访问该方法。
  7. principal:检查当前用户是否与指定的用户匹配。例如:@PreAuthorize(“#account.owner ==principal.username”) 表示只有当前用户是 account 所属用户的时候才能访问该方法。
  8. authentication:检查当前用户是否与指定的认证对象匹配。例如:@PreAuthorize(“#oauth2.hasScope(‘read’)”)表示只有当前用户具有 read 权限的时候才能访问该方法。

除了上述参数外,@PreAuthorize 注解还支持许多其他参数,例如 denyAll、permitAll、isAnonymous、isAuthenticated 等等。这些参数可以帮助开发人员更加灵活地定义访问控制规则。

在 @PreAuthorize 注解中,如果要使用自定义的 bean,需要在 bean 名称前加上 @ 符号。这是因为 @PreAuthorize 注解中的 SpEL 表达式会自动解析 @ 符号后面的字符串为 bean 名称,并将其作为 Spring 上下文中的 bean 进行处理。
例如,下面是一个使用自定义 bean 的 @PreAuthorize 注解的示例:

@PreAuthorize("@mySecurityService.checkSecurity(#account)")
public void deleteAccount(Account account) {
    // 删除账户的代码
}

在上面的例子中,@mySecurityService 表示一个名为 mySecurityService 的 bean,它具有一个名为 checkSecurity 的方法,该方法接受一个 Account 对象作为参数,并返回一个布尔值。在使用 @PreAuthorize 注解的方法上,会调用 mySecurityService 的 checkSecurity 方法来检查当前用户是否有权限执行该方法。
需要注意的是,如果自定义 bean 的名称中包含特殊字符(例如 - 或 .),那么需要使用单引号将 bean 名称括起来,例如:@PreAuthorize(“@‘my-special-bean’.checkSecurity(#account)”)。这是因为 SpEL 表达式中这些字符有特殊的含义,需要使用单引号进行转义。

@bean、@Autowired、@Resource、@Qualifier、@Reference的区别和使用详情

lombok常用注解

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值