Spring 家族框架常用注解

news2025/2/26 4:07:22

反射相关

@Target

Spring核心注解,指定自定义注解MyAnno可以应用到的java类型,从而提供编译时的类型检查和错误检测

指定类型时用枚举类ElementType下的具体枚举值,包括:
ElementType.TYPE:表示MyAnno适用于类、接口、枚举。
ElementType.FIELD:表示MyAnno适用于字段(成员变量)。
ElementType.METHOD:表示MyAnno适用于方法。
ElementType.PARAMETER:表示MyAnno适用于方法参数。
ElementType.CONSTRUCTOR:表示MyAnno适用适用于构造函数。
ElementType.LOCAL_VARIABLE:表示MyAnno适用于局部变量。
ElementType.ANNOTATION_TYPE:表示MyAnno适用于注解类型。
ElementType.PACKAGE:表示MyAnno适用于包。

@Retention

指定自定义注解MyAnno的在何时保留,有三种保留策略:

  1. RetentionPolicy.SOURCE:源代码级别保留。这种保留策略表示注解仅在源代码中可见,编译器在编译时会丢弃这些注解,不会包含在编译后的字节码中。这种注解主要用于提供编译时检查和警告,不会对运行时产生任何影响。
  2. RetentionPolicy.CLASS:类级别保留。这种保留策略表示注解会被保留到编译后的字节码中,但在运行时不可访问。这是默认的保留策略,如果在注解上未显式指定保留策略,则默认为 CLASS。这种注解可以用于编译时处理,例如使用反射来处理注解。
  3. RetentionPolicy.RUNTIME:运行时级别保留。这种保留策略表示注解会被保留到编译后的字节码中,并在运行时可以通过反射机制访问和使用。这种注解可以在运行时用于执行某些操作,例如配置、依赖注入、动态代理等。

示例
定义自定义注解MyAnno

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    // 注解的成员声明
    // ...
}

使用自定义注解MyAnno

@MyAnnotation(value=")
public class Person extends xxx implements xxx{}

启动类相关

通用

@ComponentScan

注解 @ComponentScan 是 Spring 框架中的一个核心注解,用于告诉 Spring 在哪些包下扫描组件,并将其注册到应用程序的上下文中。它可以应用于配置类(带有 @Configuration 注解的类)或启动类(带有 @SpringBootApplication 注解的类)。

@ComponentScan 提供了以下几种用法:

  1. 扫描指定包:
    可以使用 @ComponentScan 注解的 valuebasePackages 属性来指定要扫描的包。可以将一个或多个包名作为参数传递给这些属性,如下所示:
@ComponentScan(value = "com.example.package")
// 或
@ComponentScan(basePackages = {"com.example.package1", "com.example.package2"})

这将使 Spring 扫描指定的包及其子包,并注册所有的组件(带有 @Component 注解及其派生注解,如 @Controller@Service@Repository 等)。

  1. 扫描指定类所在的包:
    除了直接指定包名,还可以使用 @ComponentScan 注解的 basePackageClasses 属性来指定一个或多个类,Spring 将扫描这些类所在的包。例如:
@ComponentScan(basePackageClasses = {MyController.class, MyService.class})

这将扫描 MyControllerMyService 类所在的包及其子包。

  1. 自动检测并注册组件:
    @ComponentScan 注解默认会自动检测并注册带有 @Component 及其派生注解的组件。如果需要自动检测并注册其他类型的组件,可以使用 includeFilters 属性。例如,要自动注册带有 @Controller@Repository 注解的组件,可以这样配置:
@ComponentScan(basePackages = "com.example.package", includeFilters = {
    @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class, Repository.class})
})

通过 type 属性设置过滤器类型为 FilterType.ANNOTATION,并指定要包含的注解类型。

  1. 排除特定组件:
    如果想要排除特定类型的组件,可以使用 excludeFilters 属性。例如,要排除带有 @Configuration 注解的组件,可以这样配置:
@ComponentScan(basePackages = "com.example.package", excludeFilters = {
    @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
})

通过 type 属性设置过滤器类型为 FilterType.ANNOTATION,并指定要排除的注解类型。

以上是 @ComponentScan 注解的常见用法。它可以帮助 Spring 自动扫描和注册组件,使得我们可以方便地使用依赖注入和其他 Spring 特性来开发应用程序。

Spring Cloud 相关

@EnableDiscoveryClient

是 Spring Cloud 中的一个注解,用于启用服务发现客户端功能。它通常与服务注册中心(如 Eureka、Consul、Zookeeper 等)一起使用,以便将应用程序注册到服务注册中心并发现其他服务。

使用 @EnableDiscoveryClient 注解时,需要确保项目中已添加适当的服务发现客户端依赖,例如 spring-cloud-starter-netflix-eureka-client(对于 Eureka)或 spring-cloud-starter-consul-discovery(对于 Consul)。

使用 @EnableDiscoveryClient 的基本用法如下:

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDiscoveryClient
public class YourApplication {

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }

}

通过在 Spring Boot 应用程序的启动类上添加 @EnableDiscoveryClient 注解,应用程序将被标记为一个服务发现客户端。它会自动与配置的服务注册中心进行交互,并将应用程序的实例注册到注册中心。同时,它还会从注册中心获取其他服务的信息,以便在需要时进行服务调用

请注意,@EnableDiscoveryClient 注解是 Spring Cloud 通用的服务发现注解,提供了与多个服务注册中心的集成能力。如果只需要与特定的服务注册中心集成,还可以使用更具体的注解,例如 @EnableEurekaClient(Eureka 注册中心)或 @EnableConsulClient(Consul 注册中心)。

使用 @EnableDiscoveryClient 注解后,你就可以在应用程序中使用服务发现的功能,例如通过服务名称进行服务调用、动态获取服务实例列表等。具体的使用方法会根据具体的服务注册中心和 Spring Cloud 组件而有所不同,你可以根据所选的注册中心和相关文档进行配置和使用。

@EnableFeignClients

@EnableFeignClients 是 Spring Cloud 中的一个注解,用于启用 Feign 客户端功能,而无需手动编写 HTTP 请求和处理响应。Feign 是一个声明式的 HTTP 客户端,可以简化服务间的 RESTful API 调用。

使用 @EnableFeignClients 注解时,需要确保项目中已添加适当的 Feign 依赖,例如 spring-cloud-starter-openfeign

基本用法
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableFeignClients
public class YourApplication {

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }

}

通过在 Spring Boot 应用程序的启动类上添加 @EnableFeignClients 注解,应用程序将被标记为使用 Feign 客户端。它会自动扫描指定的包,查找带有 @FeignClient 注解的接口,并生成对应的代理类。

接下来,你需要创建一个使用 @FeignClient 注解标记的接口,该注解指定了要调用的目标服务的名称或 URL。例如:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "your-service")
public interface YourServiceClient {

    @GetMapping("/api/resource")
    String getResource();

}

在上述示例中,@FeignClient 注解的 name 属性指定了要调用的服务的名称。YourServiceClient 接口中的方法定义了要调用的具体 API。

现在,你可以将 YourServiceClient 接口注入到其他组件中,并使用它来调用目标服务的 API。Feign 会自动处理请求和响应的序列化、反序列化,并使用负载均衡等功能。

请注意,@EnableFeignClients 注解需要与其他 Spring Cloud 组件(如服务注册中心)一起使用,以便在 Feign 客户端中实现服务发现和负载均衡等功能。你需要根据具体的需求和配置,进行适当的配置和集成。

请求相关

@PathVariable

在 Spring MVC 中,@PathVariable 注解可以用于处理 RESTful 风格的 URL,其中 URL 的一部分包含可变的路径参数。通过使用 @PathVariable 注解,你可以将这些路径参数提取出来,并将它们传递给控制器方法进行处理。

@GetMapping("/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
    // 根据 id 查询用户
    User user = userService.getUserById(id);
    
    if (user != null) {
        return ResponseEntity.ok(user);
    } else {
        return ResponseEntity.notFound().build();
    }
}

@Data

用于自动实现类对象变量的set和get方法,类对象变量适用于包装类, 非基础数据类和非泛型类,如Integer, String, 自定义的ClassA

使用

  1. IDEA安装【lombok】plugin
  2. IDEA Settings中打开注解处理器

image.png

  1. 在pom.xml中引入lombok依赖
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
  1. 在需要自动i实现类对象变量的set和get方法的类声明体上添加@Data
@Data
@ApiModel(value = "全局统一返回结果")
public class Result<T> {

    @ApiModelProperty(value = "返回码")
    private int resultCode;
    ...
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java多线程(一)多线程概要

多线程概要 多线程概要 什么是进程&#xff1f; 进程的特点&#xff1a; 什么是多线程 多线程编程&#xff1a; 创建线程 1.继承 Thread 类 2.实现 Runnable 接口 多线程的优势 中断问题&#xff1a; 1. 通过共享的标记来进行沟通 2. 调用 interrupt() 方法来通知 …

flutter开发实战-实现自定义bottomNavigationBar样式awesome_bottom_bar

flutter开发实战-实现自定义bottomNavigationBar样式awesome_bottom_bar 在开发过程中&#xff0c;需要自定义bottomNavigationBar样式&#xff0c;可以自定义实现&#xff0c;这里使用的是awesome_bottom_bar库 一、awesome_bottom_bar 在pubspec.yaml中引入awesome_bottom_…

滑动谜题 -- BFS

滑动谜题 输入&#xff1a;board [[4,1,2],[5,0,3]] 输出&#xff1a;5 解释&#xff1a; 最少完成谜板的最少移动次数是 5 &#xff0c; 一种移动路径: 尚未移动: [[4,1,2],[5,0,3]] 移动 1 次: [[4,1,2],[0,5,3]] 移动 2 次: [[0,1,2],[4,5,3]] 移动 3 次: [[1,0,2],[4,5,3]…

前端实现展开收起的效果 (react)

需求背景&#xff1a;需要实现文本的展开收起效果&#xff0c;文本是一行一行的&#xff0c;数据格式是数组结构。 如图所示&#xff08;图片已脱敏&#xff09; 简单实现&#xff1a;使用一个变量控制展开收起效果。 展开收起逻辑部分&#xff08;react&#xff09; const […

layer is not a constructor缺少报错解决方案参考开发教程并在相关页面引入

问题场景&#xff1a; 1.在使用Mars3d热力图功能时&#xff0c;提示mars3d.layer.HeatLayer is not a constructor 问题原因: 1.mars3d的热力图插件mars3d-heatmap没有安装引用。 解决方案&#xff1a; 1.参考开发教程&#xff0c;找到相关的插件库&#xff1a;Mars3D 三维…

Power BI依据列中值的范围不同计算公式增加一列

Power BI依据列的范围不同计算公式增加一列&#xff0c;在我们遇到了依据范围不同的公式计算时&#xff0c;就可以采用下面公式 一、增加组计算公式 佣金分组 SWITCH(TRUE(), ry_vue clawer_zhuan[到手价]>0&&ry_vue clawer_zhuan[到手价]<475,80, ry_vue claw…

华为OD机考算法题:数字加减游戏

目录 题目部分 解读与分析 代码实现 题目部分 题目数字加减游戏难度难题目说明小明在玩一个数字加减游戏&#xff0c;只使用加法或者减法&#xff0c;将一个数字 s 变成数字 t 。 每个回合&#xff0c;小明可以用当前的数字加上或减去一个数字。 现在有两种数字可以用来加减…

华为云云耀云服务器L实例评测|华为云上试用主机安全产品Elkeid

文章目录 华为云云耀云服务器L实例评测&#xff5c;华为云上试用主机安全产品Elkeid一、背景&#xff1a;什么是主机安全二、主机安全之Elkeid1. Elkeid 介绍2. Elkeid Server3. Elkeid Server 架构Elkeid AgentCenter&#xff08;下面简称AC&#xff09;Elkeid Service Discov…

[构建自己的 Vue 组件库] 小尾巴 UI 组件库

文章归档于&#xff1a;https://www.yuque.com/u27599042/row3c6 组件库地址 npm&#xff1a;https://www.npmjs.com/package/xwb-ui?activeTabreadme小尾巴 UI 组件库源码 gitee&#xff1a;https://gitee.com/tongchaowei/xwb-ui小尾巴 UI 组件库测试代码 gitee&#xff1a…

Java(四)数组与类和对象

Java&#xff08;四&#xff09;数组与类和对象 六、数组&#xff08;非常重要&#xff09;1.定义2.遍历2.1遍历方法2.2Arrays方法 3.二维数组数组小总结 七、类和对象1. 定义&#xff08;重要&#xff09;1.1 类1.2 对象 2. this关键字&#xff08;重要&#xff09;2.1 特点 3…

方差分析的核心概念“方差分解“

方差是统计学中用来衡量数据集合中数值分散或离散程度的一种统计量。它表示了数据点与数据集合均值之间的差异程度&#xff0c;即数据的分散程度。方差越大&#xff0c;表示数据点更分散&#xff0c;而方差越小&#xff0c;表示数据点更集中。 方差的计算公式如下&#xff1a;…

自己开发一个接口文档页面html

演示效果 具体代码如下 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>框架框架文档页面</…

网络原理(一)网络基础,包括IP ,网络相关的定义

网络基础 以下图片是书上的网图。 什么是IP地址&#xff1f; IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;又译为网际协议地址。P地址是IP协议提供的一种统一的地址格式&#xff0c;它为互联网上的每一个网络和每一台主机分配一…

电商(淘宝1688京东拼多多等)API接口服务:提升商业效率和用户体验的关键

电商API接口服务&#xff1a;提升商业效率和用户体验的关键 随着电子商务的飞速发展&#xff0c;电商企业需要不断提升自身的业务能力和服务质量&#xff0c;以应对日益激烈的市场竞争。为了更好地满足商家和消费者的需求&#xff0c;电商API接口服务应运而生。本文将探讨电商…

【进阶篇】Redis内存淘汰详解

文章目录 Redis内存淘汰详解0. 前言大纲Redis内存淘汰策略 1. 什么是Redis内存淘汰策略&#xff1f;1.1.Redis 内存不足的迹象 2. Redis内存淘汰策略3. 原理4. 主动和被动1. 主动淘汰1.1 键的生存周期1.2 过期键删除策略 2. 被动淘汰2.2 被动淘汰策略的实现 5. 项目实践优化策略…

【autodl/linux配环境心得:conda/本地配cuda,cudnn及pytorch心得】-未完成

linux配环境心得&#xff1a;conda/本地配cuda&#xff0c;cudnn及pytorch心得 我们服务器遇到的大多数找不到包的问题一&#xff0c;服务器安装cuda和cudnn使用conda在线安装cuda和cudnn使用conda进行本地安装检查conda安装的cuda和cudnn本地直接安装cuda和cudnn方法一&#x…

MDK-Keil AC6 Compiler屏蔽特定警告

最近在使用STM32CubeMX生成MDK工程是&#xff0c;使用了 AC6 版本的编译器进行编译代码&#xff0c;然后发现了一些警告&#xff0c;但是在 AC5 版本下编译又正常。于是研究了下怎么屏蔽特定的警告&#xff0c;这里记录一下。 1. Keil AC6屏蔽特定警告 遇到的警告如下&#x…

CSS的break-inside 属性 的使用

break-inside 属性在 CSS 页码分隔模块中使用,它定义了一个元素内部是否允许发生页面、栏目或者区域的分隔。 break-inside有以下几个值 break-inside: avoid- 表示避免在该元素内部发生分页或者分栏。break-inside: auto - 默认允许分页break-inside: avoid-page - 避免页面…

【LeetCode题目详解】第九章 动态规划part07 70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数 (day45补)

本文章代码以c为例&#xff01; 一、力扣第70题&#xff1a;爬楼梯 题目&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 示例 1&#x…

如何在 Ubuntu 上安装和使用 Nginx?

ginx&#xff08;发音为“engine-x”&#xff09;是一种流行的 Web 服务器软件&#xff0c;以其高性能和可靠性而闻名。它是许多流行网站使用的开源软件&#xff0c;包括 Netflix、GitHub 和 WordPress。Nginx 可以用作 Web 服务器、负载均衡器、反向代理和 HTTP 缓存等。 它以…