那些年我们为之疯狂的注解

  1 @RestController

  导入:

  import org.springframework.web.bind.annotation.RestController;

  官方文档解释:

  @RestController is a stereotype annotation that combines @ResponseBody and @Controller.

  可以看出,@RestController = @ResponseBody + @Controller,也就是说如果使用了@RestController来注解Controller,那么表示这个Controller中的方法只能返回你封装好的result vo类,一般前端拿到的是一个json字符串,而不能返回jsp页面,在配置文件中配置的视图解析器在这个Controller里将失效。

  2 @Slf4j

  在类上使用这个注解可以直接实现日志输出,可以替代我们在需要打日志的每个类中的代码:

  import org.slf4j.Logger;

  import org.slf4j.LoggerFactory;

  private static final Logger LOGGER = LoggerFactory.getLogger(FeatureConfigController.class);

  使用方法:

  在pom.xml引入相应jar包:

  

  

  org.projectlombok

  lombok

  

  在类上加上@Slf4j注解,然后在方法中可以直接使用log变量来打日志。如果注解@Slf4j注入后找不到变量log,需要IDEA安装lombok插件:File → settings → Plugins ,搜索lombok。

  3 @SneakyThrows

  导入:

  import lombok.SneakyThrows;

  @SneakyThrows注解使用在方法上时,当该方法内有异常时不必try catch,也不必throws,@SneakyThrows注解会自动帮你向上抛出。

  使用方法:

  import lombok.SneakyThrows;

  public class SneakyThrowsExample implements Runnable {

  @SneakyThrows(UnsupportedEncodingException.class)

  public String utf8ToString(byte[] bytes) {

  return new String(bytes, UTF-8);

  }

  @SneakyThrows

  public void run() {

  throw new Throwable();

  }

  }

  @SneakyThrows要慎用,相关官方文档。

  4 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping

  Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping},来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。

  @{Get/Post/Put/Delete}Mapping是一个组合注解,是@RequestMapping(method = RequestMethod.{Get/Post/Put/Delete})的缩写。该注解将HTTP {Get/Post/Put/Delete} 映射到 特定的处理方法上。

  使用方法:

  @PostMapping(requestpath)

  public ResultVo function(){}

  5 @PreAuthorize、@PostAuthorize

  Spring的 @PreAuthorize/@PostAuthorize 注解更适合方法级的安全,也支持Spring 表达式语言,提供了基于表达式的访问控制。

  @PreAuthorize 注解适合进入方法前的权限验证,@PreAuthorize可以将登录用户的roles/permissions参数传到方法中。

  @PostAuthorize 注解使用并不多,在方法执行后再进行权限验证。

  所以它适合验证带有返回值的权限。Spring EL 提供 返回对象能够在表达式语言中获取返回的对象returnObject。

  还有@EnableWebSecurity和@EnableGlobalMethodSecurity,下面给了一个Spring Security With Annotation demo,可以看看具体的使用方法。

  一个Spring Security With Annotation demo

  6 @ControllerAdvice @ExceptionHandler

  异常的统一处理。

  @ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。使用@ControllerAdvice注解某个类的时候,该类会被spring当做一个组件,可以在context:component-scan被扫描到。

  @ExceptionHandler,异常处理器,应用到所有@RequestMapping注解的方法上,在其抛出指定异常时执行统一异常处理方法。

  @ControllerAdvice

  @Slf4j

  public class ControllerAdviceTest {

  @ExceptionHandler(Exception.class)

  @ResponseBody

  public ResultVo handleException(Exception e) {

  log.warn(抛出{}异常, e);

  //返回一个结果类vo

  ResultVo result = new ResultVo();

  result.setStatus(Constants.Fail);

  result.setMsg(e.getMessage());

  return result;

  }

  }

  7 其它常用的 lombok 注解

  @Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法

  @EqualsAndHashCode:实现equals()方法和hashCode()方法

  @ToString:实现toString()方法

  @Setter:注解在属性上;为属性提供 setting 方法

  @Getter:注解在属性上;为属性提供 getting 方法

  @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法

  @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法

  @Builder:使用构建模式(Builder pattern)构建一个类实例

  不使用 lombok 的方案

  public class Example{

  private T foo;

  private final String bar;

  private Example(T foo, String bar) {

  this.foo = foo;

  this.bar = bar;

  }

  public staticExampleBuilderbuilder() {

  return new ExampleBuilder();

  }

  public static class ExampleBuilder{

  private T foo;

  private String bar;

  private ExampleBuilder() {}

  public ExampleBuilder foo(T foo) {

  this.foo = foo;

  return this;

  }

  public ExampleBuilder bar(String bar) {

  this.bar = bar;

  return this;

  }

  @java.lang.Override

  public String toString() {

  return ExampleBuilder(foo = + foo + , bar = + bar + );

  }

  public Example build() {

  return new Example(foo, bar);

  }

  }

  }

  使用 lombok 的方案 guava 16.0.1

  @Builder

  public class Example {

  private int foo;

  private final String bar;

  }

  构造一个Example实例,属性不需要单独set

  Example.builder().foo(1).bar(“test”).build()

?

原文地址:https://www.cnblogs.com/qfjavabd/p/10717543.html

时间: 2024-11-02 17:53:20

那些年我们为之疯狂的注解的相关文章

iphone6“疯狂”背后的社会现象

最近的IT和互联网界,就算有再大的动作,也得忍忍往后挪.因为手机界"王牌至尊"iphone6来了.当然如果你有阿里的硬气那就另当别论.识趣的索尼和三星默默地"退场了".就像王菲和谢霆锋出场的时候,姚晨那都不再是事了,王全安也被"遗忘"了.汪峰更不可能此时"发声"了.这个时候,所以科技产品都是浮云,浮现在人们眼前的只有"苹果". 为了争抢苹果新品,全球"果粉们"及各路牛鬼蛇神可谓使劲浑身解

疯狂冰淇淋(CrazyCream)游戏源码完整版

疯狂冰淇淋(CrazyCream)游戏源码完整版,该游戏目前已经上线了一些IOS应用市场了,而且该游戏也已经有安卓版本了,游戏的源码比较源码完整的,功能也很强大的,是一款非常难得的ios休闲游戏源码的,详细请看说明.游戏说明:您是个冰激凌控吗?那么就要注意别流口水了,因为我们将为您带来的完美冰激凌装点游戏会让您为之疯狂.这是一款全新的益智游戏,设计风格可爱,可以挑战的关卡超过 100 个.用令人垂涎的配料装点冰激凌,同时还能培养您的创造力.功能:100 多个美味的关卡,还会提供更多挑战!漂亮的

大数据解析《速度与激情》——让你肾上腺素狂飙

文|彭博社 <速度与激情>系列重磅影片已经累计录得近14小时的总片长和40亿美元的总票房 <速度与激情8>将以一种观众已经为之疯狂.让片方赚得盆满钵满的语言继续讲述故事 到目前为止,<速度与激情>(Fast & Furious)系列重磅影片已经累计录得近14小时的总片长和40亿美元的总票房,这还不包括将于4月14日在各大院线上映的<速度与激情8>(The Fate of the Furious).<速度与激情8>将以一种观众已经为之疯狂.

web高级开发的成长之路

读了这篇文章之后感觉蛮受启发的,在此分享一下,献给和我一样处于困惑的朋友. 正文如下: 本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路.如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员们,你们有没有下面几种感觉? 一.我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊. 二.我发现我的水平总是跟不上技术的进步,有太多想学的东西要学,j

如何成功开发一款物联网应用_转

今天物联网和智能硬件创业的热潮席卷全球,从硅谷到东莞,从草根创业到网络巨头无不为之疯狂.根据Acquity集团的调查,2019年三分之二的消费者将会购买联网家电,而Gartner的报告显示2020年全球将有260亿商业和工业物联网设备,是2009年的30倍. 随着物联网和智能硬件门槛的不断降低,今天似乎任何一家企业都有机会把自己的产品“智能化”,无论这个产品是一双跑鞋还是刮胡刀. 但是在智能硬件新产品如过江之鲫的当下,物联网应用开发的成功经验却很少有人分享,与智能手机的热潮不同,智能硬件或物联网

《癌症&#183;真相:医生也在读》:癌症新药专家的癌症防治科普,重点是免疫疗法。四星推荐。

作者是美国诺华制药癌症新药开发部资深研究员,本书是作者对最新的癌症药物研发的科普.重点是免疫疗法和靶向治疗(估计免疫疗法是作者的研究方向).此外还有对癌症相关的传言的辟谣,和如何到美国去看病的指南. 行文风格通俗易懂,可读性比癌症科普名著<众病之王>要高一颗星.给4星是因为毕竟是个人的著作,权威性略差.期望能有权威的机构来写类似的书. 根据书中对一些时事的引用来判断,大部分内容应该是2015年写的. 以下是书中一些重要内容的摘抄: 1:我做癌症研究已经超过20年了.我可以非常诚恳地说,迄今为止

独步绍兴

本来说要21号去绍兴的,可是我这人总是办事欠打算.直到20号我才想起来要买火车票.待上网买的时候,已经发现没有我想要的出发与返回时间点了.无奈之下,只好选择28日的. 阳春,三月,江南.在几年前的想象里,还是令我非常向往的神奇的地方.而现在,我终于可以自由自在在江南的大地上四处乱窜了. 看三国演义的时候,看到曹操在马背上指着东吴大将称赞道,"文章锦绣之地,稻花鱼米之乡,竟能出如此骁勇彪悍之士!" 那时我就想,"江南多才俊啊!" 而绍兴,无疑更是名人之乡.大禹,勾践,

构建之法书评

构建之法这本书从多个层面的介绍了软件工程,我个人认为邹欣老师写的很好尤其是他对于现在的师生关系的定义是非常明确的就是“健身教练和健身学员之间的关系”,这是打破了以往我们对于师生关系的一些错误的理解.他明确的指出了老师和助教可以帮助学员的通过一系列的正确的方式,要让那个学生明白软件工程不是枯燥的,而是特别的生动和有趣,对于开发软件过程中的bug我们不应该把它当作缺陷,而是当作一个功能,一个不能正确的运行的功能. 学习软件工程我们不能只按照老师给我们制定的套路去进行的,你做一个关于软件工程的项目你要

【Leet Code】Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters Total Accepted: 20506 Total Submissions: 92223My Submissions Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating le