Spring 家族框架常用注解

news/2025/2/16 6:38:30/

反射相关

@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.ppmy.cn/news/1097999.html

相关文章

保险业的变革,软件机器人车险录入自动化

在现代社会&#xff0c;技术的迅猛发展正在改变各行各业的运作方式&#xff0c;包括保险业。随着数字化转型的推进&#xff0c;保险公司采用创新技术来提高效率和准确性。博为小帮软件机器人结合自动化的功能和OCR技术的识别能力&#xff0c;实现了车险单处理流程的全自动化。本…

RabbitMQ: 死信队列

一、在客户端创建方式 1.创建死信交换机 2.创建类生产者队列 3.创建死信队列 其实就是一个普通的队列&#xff0c;绑定号私信交换机&#xff0c;不给ttl&#xff0c;给上匹配的路由&#xff0c;等待交换机发送消息。 二、springboot实现创建类生产者队列 1.在消费者里的…

靶场溯源第二题

关卡描述&#xff1a;1. 网站后台登陆地址是多少&#xff1f;&#xff08;相对路径&#xff09; 首先这种确定的网站访问的都是http或者https协议&#xff0c;搜索http看看。关于http的就这两个信息&#xff0c;然后172.16.60.199出现最多&#xff0c;先过滤这个ip看看 这个很…

生动理解深度学习精度提升利器——测试时增强(TTA)

测试时增强&#xff08;Test-Time Augmentation&#xff0c;TTA&#xff09;是一种在深度学习模型的测试阶段应用数据增强的技术手段。它是通过对测试样本进行多次随机变换或扰动&#xff0c;产生多个增强的样本&#xff0c;并使用这些样本进行预测的多数投票或平均来得出最终预…

Linux命令200例:nohup用于在后台运行命令

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

Go语言网络编程(socket编程)UDP

1、UDP编程 1.1.1. Go语言实现UDP通信 UDP协议 UDP协议&#xff08;User Datagram Protocol&#xff09;中文名称是用户数据报协议&#xff0c;是OSI&#xff08;Open System Interconnection&#xff0c;开放式系统互联&#xff09;参考模型中一种无连接的传输层协议&#x…

leetcode 137. 只出现一次的数字 II

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [2,2,3,2]…

ILS解析漏洞复现

搭建好ILS后&#xff0c;访问127.0.0.1:8000 写一个phpinfo的脚本 可以看到。现在是不能访问的 赋予 IIS 解析 phpinfo 能力 打开服务器管理器&#xff0c;打开 IIS 管理器 点击处理程序映射 再次访问&#xff0c;发现程序可以访问 将index.php改为index.png 此时php脚本自然是…