优秀的编程知识分享平台

网站首页 > 技术文章 正文

你一定会用到的100个Spring注解(spring注解用法)

nanyue 2024-10-17 11:15:45 技术文章 9 ℃

1.Spring核心注解

  • @Bean — 创建一个由 Spring容器管理的 bean。

2. 模式注解

  • @Component — 将类标记为组件,让Spring能够在应用程序启动时自动扫描并加载这些组件。
  • @Controller — 被注解的类会被Spring MVC自动扫描,并注册为一个控制器,控制器负责接收请求,处理请求,并返回响应。
  • @RestController — 是@Controller和@ResponseBody的组合,表明该类是一个控制器,并且每个方法都有返回数据作为响应,返回值会被序列化,使用的时候省略@ResponseBody注解。
  • @Configuration — 标记类为配置类。
  • @Service — 标记类为服务层(业务逻辑)的 bean。
  • @Repository —标记这个类具有对数据库的CRUD功能,用在持久层接口上,还把抛出的数据库访问异常封装为Spring的数据访问异常类型。

3.Bean生命周期注解

  • @PostConstruct — Java原生注解,标记该方法在应用程序启动的时候执行该方法,也可以理解为在Spring容器初始化的时候执行该方法。
  • @PreDestroy — 标记的方法会在 bean 被销毁之前执行。

4.配置注解

  • @Import — 导入一个或多个 Java 配置类。
  • @PropertySource— 将applicaiton.properties配置文件中的值存储到Spring的 Environment中。
  • @Value —将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。
  • @ComponentScan — 定义扫描的路径从中找出标识了需要装配的类自动装配到Spring的bean容器中。

5.Bean属性注解

  • @Lazy —标记bean 不会立即初始化,第一次使用时才会创建。
  • @Profile —指定类或方法在特定的Profile环境才生效。
  • @Scope — 定义 bean 创建范围,例如原型、单例等。
  • @DependsOn — 标记在类或方法上,根据创建顺序显式定义对其他 bean 的依赖关系
  • @Order — 定义在Spring容器中已经被加载bean的执行顺序。
  • @Primary — 当Spring容器扫描到某个接口的多个 bean时,如果某个bean上加了@Primary 注解 ,则这个bean会被优先选用。
  • @Conditional— 当所有条件满足时,被@Conditional 标记的bean才会被创建。
  • @ConditionalOnBean— 指定的bean加载到Spring容器中时才会创建。
  • @ConditionalOnMissingBean— 指定的bean没有加载到Spring容器中时才会创建。
  • @ConditionalOnClass—判断value中的class类是否已经加载到Spring容器中,如果已加载则创建。
  • @ConditionalOnMissingClass—判断当value中的class类都没加载到Spring容器中时才创建。
  • @ConditionalOnProperty—当指定的属性存在且满足指定条件时,才会创建。

6.Bean注入注解

  • @Autowired —可以对成员变量、方法和构造函数进行标注,来完成自动装配的,默认按byType自动注入。
  • @Qualifier — 与@Autowired注解一起使用,当需要执行依赖注入时,@Qualifier会通过bean 的名称限定需要注入的对象。

@Resource—与@Autowired类似,提供依赖注入的,但属于Java原生的注解,默认按byName自动注入。

7. Spring Boot注解

  • @EnableAutoConfiguration — 根据类路径和依赖关系自动配置bean。
  • @ConfigurationProperties — 将外部化配置的配置项绑定到其标注的对象,通过访问该对象就能获取配置文件中配置项的值。
  • @ConfigurationPropertiesScan — 在类路径扫描@ConfigurationProperties注解并注册为bean。
  • @SpringBootApplication — 是由@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan组合而成,主要作用就是标记这个类是SpringBoot主配置类,开启了SpringBoot程序的组件扫描和自动配置功能。
  • @EntityScan — 用来扫描和发现指定包及其子包中的Entity定义。
  • @EnableJpaRepositories— 用来扫描和发现指定包及其子包中的Repository定义。

注:当定义的Entity和Repository不在应用程序所在包及其子包的时候,就需要使用@EntityScan和@EnableJpaRepositories。

8. Spring Boot 测试相关注解

  • @SpringBootTest—启动SpringBoot应用,进行集成测试。
  • @WebMvcTest— 用于测试 Spring MVC 控制器层的功能。自动配置 MockMvc,并加载控制器层相关的组件,如控制器、拦截器等。
  • @DataJpaTest— 用于测试与 JPA 相关的功能。自动配置嵌入式数据库,并加载与 JPA 相关的组件。仅加载 JPA 相关的组件,提高测试的精确性和速度。
  • @RestClientTest— 用于测试使用 Spring 的 RestTemplate 进行 HTTP 请求的功能。自动配置 RestTemplateBuilder,并加载相关的组件。
  • @MockBean — 被标记的对象中所有的方法默认都不会被执行 ,有返回值的会返回null。
  • @SpyBean — 被标记的对象中所有的方法默认会调用真实的方法,有返回值的会返回方法的真实返回值。
  • @Mock — 是 Mockito 库提供的注解,通常与MockitoJUnitRunner或MockitoExtension 结合使用来初始化模拟对象。
  • @ContextConfiguration — 用于指定ApplicationContext的配置信息,从而使测试类中可以使用ApplicationContext容器中的Bean实例。通过该注解,可以加载配置文件或者配置类,也可以指定多个配置文件或者配置类。
  • @ExtendWith — 为测试类或测试方法提供扩展类引用。通过提供一系列的扩展点(extension point)来支持用户在执行具体的单测实例前后去做一些环境准备等工作, 这部分工作与单测内容无关, 但对于单测的正常执行却至关重要, 比如Spring单测需要启动一个Spring容器, 完成指定bean的构建; 或执行测试数据库前进行连接数据库等工作。
  • @SpringJUnitConfig@ContextConfiguration@ExtendWith(SpringExtension.class)的组合,根据配置类或者配置文件指定应用程序上下文。
  • @TestPropertySource — 用于在测试中指定要加载的属性文件。可以覆盖应用程序中的属性配置,方便测试不同的配置。
  • @DirtiesContext — 在方法上加上这个注解表示底层Spring容器在该方法的执行中被“污染”,从而必须在方法执行结束后重新创建(无论该测试是否通过)。
  • @ActiveProfiles — 是用于单元测试场景的注解,可以为测试代码指定一个隔离的profile。
  • @Sql — 用于在测试执行前或执行后运行 SQL 脚本。可以用于准备测试数据或清理测试环境。

9. 事务相关注解

  • @EnableTransactionManagement — 用于启用基于注解的事务管理。通过使用这个注解,你可以开启Spring对事务的自动管理功能,使得你可以在方法上使用 @Transactional 注解来声明事务。
  • @Transactional — 为指定方法声明以事务方式处理。

10.JPA相关注解

  • @Id — 将字段标记为实体的主键。
  • @GenerateValue — 指定主键的生成策略。
  • @Entity — 声明该 Java 类为实体类,将映射到指定的数据库表。
  • @Column — 为字段提供附加配置,例如列名。
  • @Table — 为实体提供附加配置,例如表名。
  • @PersistenceContext —是JPA的一个注解,用于将EntityManager实例注入到组件中,EntityManager是JPA用于管理实体对象和实体类的接口。通过该注解,可以在组件中直接使用EntityManager。
  • @Embedded—是注释属性的,表示该属性的类是嵌入类。
  • @Embeddable — 是注释Java类的,表示类是嵌入类。

注:当一个实体类要在多个不同的实体类中进行使用,而本身又不需要独立生成一个数据库表,这就是需要使用@Embedded和@Embeddable注解。

  • @EmbeddedId — 使用嵌入式主键类实现复合主键。
  • @AttributeOverride — 覆盖字段的默认映射
  • @Transient —JPA会忽略该属性,不会映射到数据库中,即程序运行后数据库中将不会有该字段。
  • @CreationTimestamp — 用于指定时间戳字段,该注解可以自动将当前时间戳赋值给指定的字段,从而方便的记录实体类的创建时间。
  • @UpdateTimestamp — 用于指定时间戳字段,该注解可以自动将当前时间戳赋值给指定的字段,从而方便的记录实体类的更新时间。
  • @ManyToOne — 表示 N:1 关系映射,注解定义了与另一个具有多对一多重性的实体类的单值关联。
  • @JoinColumn — 用来定义主键字段和外键字段的对应关系(如果要映射的字段、列本身就是主键,则可以省略该注解)。
  • @OneToOne — 实现一对一关系映射。
  • @MapsId — 当前字段使用与此实体具有一对一关系或一对多关系的另一个实体的相同 Id。这将避免使用额外的列来存储两个实体之间的引用,同时能够拥有双向关系。
  • @ManyToMany — 用来定义具有多对多,多重性的多值关联。需要和@JoinTable表结合使用,ManyToMany总是使用中间关系连接表来存储关系。
  • @JoinTable — 用于关联映射,它是在关联的拥有方进行配置。使@JoinTable 注解将创建一个连接表,也称为“中间表”。
  • @BatchSize — 用于定义延迟加载的集合大小。
  • @FetchMode — 定义关联的获取策略,例如在单个子查询中加载所有实体。

11.AOP相关注解

  • @EnableAspectJAutoProxy — 开启Spring注解AOP的支持。
  • @Aspect — 该注解是把此类声明为一个切面类。
  • @Before — 该注解是声明此方法为前置通知 (目标方法执行之前就会先执行被此注解标注的方法)。
  • @AfterReturning — 该注解是声明此方法为返回通知 (目标方法正常执行返回后就会执行被此注解标注的方法)。
  • @AfterThrowing — 该注解是声明此方法为异常通知 (目标方法在执行出现异常时就会执行被此注解标注的方法)。
  • @After — 该注解是声明此方法为后置通知 (目标方法执行完之后就会执行被此注解标注的方法)。
  • @Around — 该注解是环绕通知是动态的,可以在前后都设置执行。
  • @Pointcut — 该注解是声明一个公用的切入点表达式(通知行为的注解的都可以直接拿来复用)。

12.Spring Boot 安全相关注解

  • @EnableWebSecurity — 由@EnableWebSecurity和@EnableGlobalAuthentication组合而成,它用于开启 Web 安全性的支持和导入认证相关配置类。
  • @EnableGlobalMethodSecurity — 开启Spring方法级安全。同时这个注解为我们提供了prePostEnabled 、securedEnabled 和 jsr250Enabled 三种不同的机制来实现同一种功能。
  • @EnableMethodSecurity —启用基于注解的方法安全。
  • @PreAuthorize — 会在方法执行前进行权限验证,支持Spring EL表达式,它是基于方法注解的权限解决方案。只有当@EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PreAuthorize才可以使用。
  • @PostAuthorize — 在方法执行后再进行权限验证,适合验证带有返回值的权限,Spring EL 提供 返回对象能够在表达式语言中获取返回的对象returnObject。
  • @RolesAllowed — 基于角色列表的权限认证。
  • @Secured — 判断是否具有角色,注意这里匹配的字符串需要添加前缀“ROLE_”。

13.MVC注释

  • @RestController—@Controller和@ResponseBody的组合。
  • @RequestMapping—将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。
  • @ResponseBody—将Controller的方法返回的对象,通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
  • @RequestBody—用于将HTTP请求的内容绑定到方法的参数上。
  • @RequestParam—用于将请求参数区数据映射到功能处理方法的参数上。
  • @PathVariable—用于接收请求路径中占位符的值。
  • @PostMapping—处理POST请求。
  • @GetMapping—处理Get请求。
  • @PutMapping—处理Put请求。
  • @DeleteMapping—处理Delete请求。
  • @PatchMapping—对资源数据打补丁或者局部更新。
  • @ModelAttribute—标记该方法在Controller中的每个方法执行前会被调用,没有返回值的 @ModelAttribute 方法使用 model.addAttribute(String key, Object value) 来向 Model 中增加参数,而有返回值的@ModelAttribute 方法则自动将该返回值加入到ModelMap中返回。
  • @CrossOrigin — 使用它来启用跨源资源共享(CORS)的支持。(默认情况下,@CrossOrigin允许在@RequestMapping注解中指定的所有源和HTTP方法)。

14. 定时任务相关注解

  • @EnableScheduling—用于启用Spring的定时任务功能。通过这个主键,可以在Spring应用程序中创建定时任务,使得指定的方法可以按照设定的时间间隔或固定的时间点自动执行。
  • @Scheduled — 用于将一个方法标记为定时任务,该方法将根据指定的时间表执行。
  • @Scheduleds—允许指定多个@Scheduled注解的配置。这对于定义多个不同时间表的定时任务非常有用。可以在同一个方法上应用多个@Scheduled主键,或者使用@Scheduleds将它们封装在一个容器内。

15.异常相关注解

  • @ExceptionHanding—用于在 Spring MVC 应用程序中处理特定异常类型的方法。

Tags:

最近发表
标签列表