微服务中常用的注解

2023-11-07

注解的定义

Annotation(注解),用于为Java代码提供元数据。简单理解注解可以看做是一个个标签,用来标记代码。是一种应用于类、方法、参数、变量、构造器及包的一种特殊修饰符。

1.@Target
表示该注解类型所使用的程序元素类型,结合ElementType.XXX来使用。

2.Override
用于告知编译器,我们需要覆写超类的当前方法

3.@Deprecated
使用这个注解,用于告知编译器,某一程序元素(比如方法,成员变量)不建议使用了(即过时了)。

4.@Component

把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>

5.@Autowired

这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get。

6.@MapperScan

扫描mapper类包的路径,还可以扫描多个包。

7.@Id

标注用于声明一个实体类的属性映射为数据库的主键列该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。 @Id标注也可置于属性的getter方法之前。

8.@Bean

注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。它是一个方法级别上的注解,主要用在@Configuration注解的类里

9.@Configuration

这个注解类标识这个类可以使用Spring IOC容器作为bean定义的来源。

10.@EnableAutoConfiguration

能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。

11.@ComponentScan

会自动扫描指定包下的全部标有@Component的类,并注册成bean

12.@SpringBootApplication

来标注这是一个springboot的应用,被标注的类是一个主程序

这个注解相当于@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的结合

实例:

@SpringBootApplication

public class App{

 

    public static void main(String[] args) {

 

        SpringApplication.run(App.class,args);

    }

}

13.@RunWith

是一个运行器

14.@RunWith(JUnit4.class)

是指用JUnit4来运行

15.@RunWith(SpringJUnit4ClassRunner.class)

让测试运行于Spring测试环境

16.@RunWith(Suite.class)

是一套测试集合

17.@SpringBootTest

进行单元测试

18.@GeneratedValue

存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键),@GeneratedValue提供了主键的生成策略。@GeneratedValue注解有两个属性,分别是strategy和generator,其中generator属性的值是一个字符串,默认为"",其声明了主键生成器的名称(对应于同名的主键生成器@SequenceGenerator和@TableGenerator)。

19.@Service

加上这一行以后,将自动扫描路径下面的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了

20.@Controller

被@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,而@Contoller注解在org.springframework.stereotype包下。其中被@RequestMapping标记的方法会被分发处理器扫描识别,将不同的请求分发到对应的接口上。

实例:

@Controller

public class TestController {

 

    private static final Log logger  = LogFactory.getLog(TestController.class);

 

    @RequestMapping(value = "/hello")

    public ModelAndView hello () {

        logger.info("hello() 方法被调用");

        ModelAndView mv = new ModelAndView();

        mv.addObject("message", "Hello, Ma Yuzhe!");

        mv.setViewName("/WEB-INF/views/hello.jsp");

        return mv;

    }

}

TestController即为一个自定类。在该类的前面标记@Controller,该类就成了一个控制器类。

在浏览器地址栏中输入http://localhost:8080/hello,即对hello()方法进行调用,前台返回hello.jsp界面

21.@RequestMapping

开发者需要在控制器内部为每一个请求动作开发相应的处理方法。org.springframework.web.bind.annotation.RequestMapping 注解类型指示Spring用哪一个类或方法处理请求动作,该注解可用于类和方法。

@RequestMapping可以用来注释一个控制器类,在这种情况下,所有方法都将映射为相对于类级别的请求,表示该控制器处理的所有请求都被映射到value属性所指示的路径下。示例代码如下:

实例:

@Controller

@RequestMapping(value="/user")

public class UserController{

  @RequestMapping(value="/register")

  public String register(){

    return "register";

  }

 

  @RequestMapping(value="/login")

  public String login(){

    return "login";

  }

 

 

 

 

22.@ResponseBody

@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

实例:

  @RequestMapping("/login")

  @ResponseBody

  public User login(User user){

    return user;

  }

  //User字段:userName pwd

  //那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

 

  //效果等同于如下代码:

  @RequestMapping("/login")

  public void login(User user, HttpServletResponse response){

    response.getWriter.write(JSONObject.fromObject(user).toString());

  }

 

 

 

 

23.@Repository

实现dao访问,用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件

24.@RestController

Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合。

即@RestController是@ResponseBody和@Controller的组合注解。

实例:

@RestController

public class HelloController {

 

    @RequestMapping(value="/hello",method= RequestMethod.GET)

    public String sayHello(){

        return "hello";

    }

}

与下面的代码作用一样

 

@Controller

@ResponseBody

public class HelloController {

 

    @RequestMapping(value="/hello",method= RequestMethod.GET)

    public String sayHello(){

        return "hello";

    }

}

25.@RequestMapping

此注解可以作用在控制器的某个方法上,也可以作用在此控制器类上。当控制器在类级别上添加@RequestMapping注解时,这个注解会应用到控制器的所有处理器方法上。处理器方法上的@RequestMapping注解会对类级别上的@RequestMapping的声明进行补充。

实例:

@RestController

@RequestMapping("consumer")

public class ConsumerController {

    @Autowired

    private RestTemplate restTemplate;

 

    @GetMapping("{id}")

    @HystrixCommand(fallbackMethod = "queryByIdFallback")

    public String queryById(@PathVariable("id") Long id) {

        String url = "http://user-service/user/" + id;

        String user = restTemplate.getForObject(url, String.class);

        return user;

    }

    public String queryByIdFallback(Long id) {

        return "服务器忙!";

    }

}

 

 

 

 

26.@GetMapping与 @PostMapping

都是是一个组合注解,都是@RequestMapping(method = RequestMethod.GET)的缩写。

27.@EnableEurekaServer

启动EurekaServer

28.@EnableDiscoveryClient与@EnableEurekaClient

开启客户端

@EnableDiscoveryClient注解是基于spring-cloud-commons依赖,并且在classpath中实现;

@EnableEurekaClient注解是基于spring-cloud-netflix`依赖,只能为eureka作用;

如果你的classpath中添加了eureka,则它们的作用是一样的。

29.@LoadBalanced

在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力

实例:

@Bean

    @LoadBalanced

    public RestTemplate restTemplate() {

        // 这次我们使用了OkHttp客户端,只需要注入工厂即可

        return new RestTemplate();

    }

 

 

 

 

30.@EnableCircuitBreaker

启动断路器

方法RestTemplate restTemplate():初始化RestTemplate 对象,并使用 @LoadBalanced作负载均衡

实例:

@SpringBootApplication

@EnableCircuitBreaker

@EnableEurekaClient // 配置本应用将使用服务注册和服务发现

public class HystrixSimpleCloudConsumerApplication {

 

    public static void main(String[] args) {

        args = new String[1];

        args[0] = "--spring.profiles.active=hystrix-simple";

        SpringApplication.run(HystrixSimpleCloudConsumerApplication.class, args);

    }

 

    /**

     * 初始RestTemplate

     * @return

     */

    @LoadBalanced

    @Bean

    public RestTemplate restTemplate() {

        return new RestTemplate();

    }

 

    /**

     * 使用fastjson做为json的解析器

     * @return

     */

    @Bean

    public HttpMessageConverters fastJsonHttpMessageConverters() {

        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

        FastJsonConfig fastJsonConfig = new FastJsonConfig();

        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);

        fastConverter.setFastJsonConfig(fastJsonConfig);

        HttpMessageConverter<?> converter = fastConverter;

        return new HttpMessageConverters(converter);

    }

}

 

 

 

 

31.@EnableHystrix

启动熔断降级服务

32.@SpringCloudApplication

因为一个标准的Eureka服务,一般都需要@EnableDiscoveryClient、@SpringBootApplication以及@EnableCircuitBreaker三个注解,所以Spring官方提供了这个注解

实例:

@SpringCloudApplication

public class ConsumerApplication {

    public static void main(String[] args) {

        SpringApplication.run(ConsumerApplication.class, args);

    }

 

    @Bean

    @LoadBalanced

    public RestTemplate restTemplate() {

        // 这次我们使用了OkHttp客户端,只需要注入工厂即可

        return new RestTemplate();

    }

}

 

 

 

33.@HystrixCommand

在hiService方法上加上@HystrixCommand注解。该注解对该方法创建了熔断器的功能,并指定了fallbackMethod熔断方法,熔断方法直接返回了一个字符串,字符串为"hi,"+name+",sorry,error!",代码如下:

实例:

@Service

public class HelloService {

 

    @Autowired

    RestTemplate restTemplate;

 

    @HystrixCommand(fallbackMethod = "hiError")

    public String hiService(String name) {

        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);

    }

 

    public String hiError(String name) {

        return "hi,"+name+",sorry,error!";

    }

}

34.@DefaultProperties

读取properties文件

如果每一个方法都提供一个熔断处理方法,那么会显的类特别的臃肿,所以我们可以提供一个通用的处理方式,也就是在类上面添加一个注解@DefaultProperties

实例:

@RestController

@RequestMapping("consumer")

@DefaultProperties(defaultFallback = "defaultFallback")

public class ConsumerController {

    @Autowired

    private RestTemplate restTemplate;

    @GetMapping("{id}")

    @HystrixCommand//开启启用

    public String queryById(@PathVariable("id") Long id) {

        String url = "http://user-service/user/" + id;

        String user = restTemplate.getForObject(url, String.class);

        return user;

    }

    public String defaultFallback() {

        return "抱歉,服务器hin忙!";

    }

}

35.@HystrixProperty

设置熔断等级

实例:

@GetMapping("{id}")

@HystrixCommand(

        commandProperties = {

        @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),

        @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),

        @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "60")

})

public String queryById(@PathVariable("id") Long id) {

    if(id % 2 == 0) {

        throw new RuntimeException("");

    }

    String url = "http://user-service/user/" + id;

    String user = restTemplate.getForObject(url, String.class);

    return user;

}

 

 

36.@FeignClient

指明要访问的服务名称

37.@EnableFeignClient

在启动类上,添加注解,开启Feign功能

实例:

@SpringCloudApplication

@EnableFeignClients//开启feign

public class ConsumerApplication {

    public static void main(String[] args) {

        SpringApplication.run(ConsumerApplication.class, args);

    }

/*  如果前面有测试注意不会受影响

    @Bean

    @LoadBalanced

    public RestTemplate restTemplate() {

        // 这次我们使用了OkHttp客户端,只需要注入工厂即可

        return new RestTemplate();

    }*/

}

 

 

 

 

 

 

38.@EnableZuulProxy

通过@EnableZuulProxy注解开启Zuul的功能

实例:

@SpringBootApplication

@EnableZuulProxy // 开启Zuul的网关功能

public class GatewayApplication {

    public static void main(String[] args) {

        SpringApplication.run(GatewayApplication.class, args);

    }

}

 

 

 

 

 

39.@EnableFurekaServer

在顶目启动类上使用@EnableEurekaServer,可以将项目作为SpringCloud中的注册中心

40.@EnableDiscoveryClient、 @EnableEurekaClient

在启动类上面添加 @EnableDiscoveryClient、 @EnableEurekaclient 这二个注解作用,都可以让该服务注册到注册中心上去。

@EnableEurekaClient 只支持Eureka注册中心,@EnableDiscoveryClient 支持Eureka、 Zookeeper、Consul 这二个注册中心

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微服务中常用的注解 的相关文章

  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • 使用 AbstractTableModel 获取 JTable 中选定的行

    我有一个JTable using AbstractTableModel我在哪里有一个JCheckBox在第一列中用于选择行 现在 我需要从已检查的表中获取选定的行 现在 我按顺序从第一行遍历到最后一行并获取所有选择的行 如下所示 List
  • 在Java中清空数组/处理

    除了循环遍历数组中的每个元素并将每个元素设置为 null 之外 Java 处理中是否有一个本机函数可以简单地清空数组 或销毁它 以便能够将其重新声明为新数组 There s Arrays fill myArray null 并不是说它执行的
  • 将 spring-security 与 spring-webflux 结合使用时禁用 WebSession 创建

    我正在使用 Rest api 运行无状态 spring boot 应用程序 并希望按照所述禁用 WebSessions 的创建https www baeldung com spring security session https www
  • 在 IntelliJ 上进行 Google App Engine Java 开发?

    令人烦恼的是 Google App Engine 已成为其中的另一个项目 他们只发布 Eclipse 插件 如 Spring Webflow 而我更喜欢 IntelliJ 你能用IntelliJ成功运行本地测试环境吗 并调试 部署本地或实时
  • 如何测试调用父类的受保护(不需要的)方法的方法?

    我陷入了一个非常奇怪的情况 我有一些需要测试的特定代码 这里是 public class A The real method of real class is so big that I just don t want to test it
  • firebase推送通知错误Spring Boot服务器端

    我正在尝试从 Spring Boot 服务器端发送通知到客户端 android 服务器运行良好 一切都很好 2020 09 01 08 13 07 691 INFO 18941 restartedMain e DevToolsPropert
  • 初级 Java 计数器代码

    我的教授希望我这样做 使用下面的 Counter 接口写入多个可互换计数器 public interface Counter Current value of this counter int value Increment this co
  • 用 java 编写解释器时的 switch 或 if 语句

    当前的作业需要我编写一个程序 以一种非常微小且基本的编程语言 行为有点像 FORTRAN 来读取包含指令的文件并执行这些指令 基本上它是我猜的语言的简单解释器 它是完全线性的 所有语句都是按顺序定义的 并且只有字符串和整数变量 我需要查找和
  • 从关卡堆栈中获取相对比例的数学

    为这个可怕的标题道歉 我花了 10 分钟试图用一句话来解释这一点 但失败了 虽然提示这个问题的应用程序是用Java Android 编写的 但我认为它非常通用并且适用于任何语言 欢迎使用伪代码 或简单的英语 回复 我不确定是否应该标记所有通
  • Java 泛型:如何为泛型类型指定类类型?

    我有一个 POJO 指定为 MyClass u where U是泛型类型参数 我正在尝试编写一个接受类引用的实用方法Class u
  • SimpleDateFormat 将 lenient 设置为 false 时出现异常

    为什么这段代码会抛出无法解析日期的异常 SimpleDateFormat f new SimpleDateFormat yyyy MM dd T HH mm ss 000Z f setLenient false String dateStr
  • Java:使用 Java.util.concurrent 线程访问读取线程串行端口

    我正在尝试编写一个 Java 串行设备驱动程序并想使用 对我来说是新的 java util concurrent包裹 我有一种发送数据包然后等待 ACK 的方法 我打算有炭 接收在不同的线程中运行 如果接收线程收到 ACK 它应该使用发送数
  • 战争库中的罐子爆炸

    我们可以将分解的 jar 文件放入 war web inf 库中吗 它在 JBOSS 4 2 中对我不起作用 我收到以下错误并且无法部署应用程序 Caused by javax management RuntimeOperationsExc
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • 从命令行运行 Maven 插件的语法是什么。

    我看到这里已经有人问过这个问题 如何从命令行执行maven插件 https stackoverflow com questions 12930656 how to execute maven plugin from command line
  • 如果抛出RuntimeException,是否可以将其作为异常捕获?

    如果我有一个try抛出一个块RuntimException子类 可以是后续的catch块将其捕获为Exception 具体来说 public class MyAppException extends RuntimeException In
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢
  • JMockit - 初始化问题

    当我使用以下测试时 我收到警告 警告 JMockit 是按需初始化的 这可能会导致某些测试失败 请检查文档以获取更好的初始化方法 这是我的测试实现 package test import static mockit Mockit impor
  • 编写自定义 Eclipse 调试器

    EDIT 一定有某种方法可以解决这个问题 而无需编写全新的调试器 我目前正在研究在现有 java 调试器之上构建的方法 如果有人对如何获取 Java 调试器已有的信息 有关堆栈帧 变量 原始数据等 有任何想法 那将非常有帮助 我想要做的是我

随机推荐

  • mysql 同步失败_线上MYSQL同步报错故障处理方法总结

    前言 在发生故障切换后 经常遇到的问题就是同步报错 下面是最近收集的报错信息 记录删除失败 在master上删除一条记录 而slave上找不到 Last SQL Error Could not execute Delete rows eve
  • C语言执行过程

    系列1 C语言执行过程 系列2 C程序方法调用 系列3 CS IP 寄存器 本文中涉及的代码地址 analyseExecutionOfC 文件结构 analyse execution of c compilePreProcessSource
  • [失败] 网易云音乐爬虫分析

    网易云音乐js破解分析 大家好 我是W 最近在搞毕设相关的材料 所以很久没有敲代码和写博客了 刚好 一个同学有个需求 要获取网易云音乐的歌曲id和封面地址 然后用外链播放 相当于在他的系统里加一个小功能 锦上添花 所以来找到我 刚开始我觉得
  • module xxx has no attribute

    授人以鱼不如授人以渔 希望这篇文章可以帮助大家解决一系列类似的问题 大家耐心看下去 肯定会有收获 今天看见一篇博客解决问题的思路给了我很大的启发 于是我就将他记录下来 大家可以一起学习一下 在文章的最后我也会挂出他的链接 这里具体为具体错误
  • Python操作SQL中json格式的问题

    1 json中的引号必须使用双引号 在mysql中双引号和单引号可以互换 但不可混合使用 需成对出现 mysql支持存储json格式数据 但是写入时json内容中引号必须使用双引号 否则出现下述错误 pymysql err Operatio
  • 超分辨率基础

    超分辨率综述 Image Super resolution 的深度学习方法 微信二维码引擎OpenCV开源 微信扫码背后的图像超分辨率技术 技术解析 即构移动端超分辨率技术 DIV2K数据集下载 B100 Manga109 Set5 Set
  • firefly框架分析之netconnect package(一)

    firefly下的目录结构如下 里面的各个包将会一一的介绍 今天先开始看看netconnect包 该包下面这些模块从connection开始 Connection py 与客户端的连接对象 通过其与客户端通讯 向客户端发送封装过的数据 还可
  • Qt源码解析1---D指针原理

    D指针 什么是d指针 如果你已经看过到Qt源文件像QLablel QPicture QLabel picture const Q D const QLabel if d gt picture return d gt picture retu
  • ChatGPT的接口在哪

    ChatGPT本身不是一个独立的接口 而是一个预训练的自然语言处理模型 如果您需要使用ChatGPT来实现某个自然语言处理任务 例如文本生成 问答等 您可以使用Python中的深度学习框架 如TensorFlow PyTorch 加载预训练
  • 谈我对于ajax的理解

    Ajax的全称是Asynchronous JavaScript and XML 中文名称定义为异步的JavaScript和XML Ajax是Web2 0技术的核心由多种技术集合而成 使用Ajax技术不必刷新整个页面 只需对页面的局部进行更新
  • qt 信号槽默认参数 toggled 和 trigger的区别

    toggled和trigger区别 1 toggle 类似开关 具有2个状态 打开 关闭 使用这个信号 是在这2个状态之间切换 2 trigger是一次性的 点击后 无法改变状态 要么是打开 要么是关闭 参考 http blog csdn
  • c# 对txt文件的读取与写入

    C txt文件分析 读取与写入 c 中对txt文件的读取写入在工作中用到的很多 今天写一个之前工作中用到的小demo 案例场景要求 txt文件中为很多条标记时间戳的报文 需要计算出每条报文从开始接收到结束用了多长时间 案例执行 如txt文件
  • Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法 为什么要学习数据结构和算法 这里我举个简单的例子 编程好比是一辆汽车 而数据结构和算法是汽车内部的变速箱 一个开车的人不懂变速箱的原理也是能开车的 同理一个不懂数据结构和算法的人也能编程 但是如果一个开车
  • apk文件 -- 反编译

    源博客 https www cnblogs com mfrbuaa p 4588057 html 编译工具 apktool 资源文件获取 能够提取出图片文件和布局文件进行使用查看 dex2jar 将apk反编译成java源代码 classe
  • Python中多线程和线程池的使用方法

    Python是一种高级编程语言 它在众多编程语言中 拥有极高的人气和使用率 Python中的多线程和线程池是其强大的功能之一 可以让我们更加高效地利用CPU资源 提高程序的运行速度 本篇博客将介绍Python中多线程和线程池的使用方法 并提
  • ad9361收发异常问题分析

    最近在调试ad9361 发送都调试好了 但是接收一直没调试好 折腾了一个多月才搞定接收 根据官方提供的api代码 需要修改的有 1 修改reference clk rate参考时钟 2 修改xo disable use ext refclk
  • CTF——被改错的密码

    http ctf idf cn index php g game m article a index id 29 cca9cc444e64c8116a30la00559c042b4看着像一串MD5加密 但是实际不是 去掉中间的l 进行md5
  • 新手小白一看就懂的Excel技能之入门基础

    很多同学开开心心拿到新买的电脑 开机一看 桌面干干净净的 想打开Excel 半天找不到 这些痛 只有新手小白才能懂 今天 我给大家好好讲讲怎么使用Excel 鼠标左键点击电脑桌面左下角的 搜索 输入 Excel 看到 Microsoft O
  • 过拟合现象,原因,以及降低过拟合的方法

    一 什么是过拟合 为什么要避免过拟合 图1 1 Overfit Normal 上图是一张使用线性回归拟合二维样本数据的matlab输出图片 其中Normal曲线是使用使用了带参数空间限制的最小二乘法进行求解的模型 Overfit曲线是使用最
  • 微服务中常用的注解

    注解的定义 Annotation 注解 用于为Java代码提供元数据 简单理解注解可以看做是一个个标签 用来标记代码 是一种应用于类 方法 参数 变量 构造器及包的一种特殊修饰符 1 Target 表示该注解类型所使用的程序元素类型 结合E