【Spring Boot】注解总结

首先

你好。
在学习Spring Boot的过程中,我总结了许多遇到的注解。

“什么是注释?”

「アノテーション」とは、翻訳すると「注釈や注記」などの意味を持つ言葉であり、プログラムが実行環境や外部ソフトウェアに対して、自身の目的や希望する動作を伝えるためのものです。

在Spring Boot中使用的注解

【关于DI的注解】

@自动装配

透过在类字段上使用该注解,可以实例化想要使用的类并将其存储在变量中。

@组件

给想要实例化的类添加的注解。
通过添加此注解,将该类作为Bean注册到DI容器中,并将实例注入带有@￰Autowired注解的字段中。

控制器

這是給想要實例化的類別添加的標註2。
這是給控制與客戶端的資料輸入輸出(從畫面接收HTTP請求)的類別添加的。

@服务

要为需要实例化的类添加的注解之三。
需要为提供业务逻辑的类添加。

@仓库

用于标注要实例化的类的第四个注解。
用于与数据库交互的类上标注。

@设定

如果使用注释向DI容器注册Bean变得复杂,可以创建一个名为JavaConfig的类来生成Bean。该JavaConfig类需要使用注释。

@咖豆

在JavaConfig的实例生成方法上标注的@Configuration注解。

@Configuration
public class TeatConfig {

  // TestComponentクラスをDIコンテナに登録する
  @Bean 
  public TestComponent testComponent() {
    return new TestComponent();
  }
}

@￰范围

指定实例的生成和销毁时机的注解。

@Controller
// HTTPリクエストが送られてくるたびにインスタンスが生成される
@Scope("request")
 public class Sample {
  
}

主要的

在需要优先进行DI的类上添加注解。

【关于Controller类的注解】

@控制器

用于REST API的Controller类中的注解。
通过在类上使用此注解,该类内方法的返回值将作为HTTP响应体返回。

@￰RequestMapping:@￰RequestMapping

用于定义请求URL的类和方法执行处理的注解。可以附加在类或方法上。
可以指定HTTP方法(如GET和POST)的“method”属性和指定URL路径的“value”属性。

 // GETで"http://localhost:8080/sample" にアクセスすると、このメソッドが実行される
@RequestMapping(value = "sample", method = RequestMethod.GET)
 public String sample() {
  return "sample";
}

@GET映射

@￰RequestMapping的GET请求注解。使用该注解可以省略通过@￰RequestMapping所描述的method属性。

@￰提交后的映射请求

@RequestMapping是用于处理POST请求的注解。

请以本机的方式将以下内容翻译成中文,只需要一种选项:

@￰RequestParam

用于接收包含在URL查询参数和请求体中的参数的注解。
可以指定以下属性。

    • name属性・value属性:リクエストパラメータを指定する。nameとvalueの役割に違いはない。

 

    • required属性:パラメータはデフォルトでは必須になるため、パラメータの指定を任意にする場合、falseを指定する。

 

    defaultValue属性:リクエストパラメータが指定されなかった時のデフォルト値を指定する。
@GetMapping(value = "/sample")
// 「name」というリクエストパラメータに紐づく値をsampleメソッドの引数nameに設定
// "http://localhost:8080/sample?name=AAA" でアクセスすると、nameには「AAA」が設定される
// "http://localhost:8080/sample" でアクセスすると、nameには「SAMPLE」が設定される
 public String sample(@RequestParam(name = "name", defaultValue = "SAMPLE", required = false) String name) {
  return name;
}

@￰路径变量

用于接收URL中包含的动态参数的注解。
@￰RequestParam是用来从查询参数中提取值,而@￰PathVariable则是从URL路径中提取值。

undefined
@GetMapping(value = "/sample/{name}")
// "http://localhost:8080/sample/AAA" でアクセスすると、nameには「AAA」が設定される
 public String sample(@PathVariable("name") String name) {
  return name;
}

控制器建议

通过在类上添加注解,可以提供在所有Controller中共享的方法。可以用于在整个应用程序中共享的异常处理等情况。
只有标有以下注解的方法才可以在Controller之间共享。

@异常处理

通过在方法上添加注解可以实现异常处理。
通过在注解的参数中指定异常类,可以为每个异常准备相应的处理。

@￰初始化绑定器

你可以通过@ RequestParam 或 @ PathVariable 等注解,定义在将接收到的值绑定到对象(设置)时应执行的操作。
可以定义将空字符串转换为null,删除字符串中的空格等处理。

@￰模型属性

将请求参数绑定到指定的类上的注解。可以附加在方法或方法的参数上。

@RestController
 public class SampleController{
  @GetMapping("/")
    public String sample(@ModelAttribute SampleData sampleData) {
      return "form";
    }
 }
@Data 
 public class SampleData {
  private id;
  private password;
}

【关于Service类的注解】

交易性的

通过给类方法附加的注释,当发生异常时会自动回滚。
如果发生非检查异常(RuntimeException)及其子类,则会回滚(返回到之前的执行状态),但是如果发生检查异常(Exception及其子类,但不包括RuntimeException),则不会回滚,而是会提交(确认处理)。

【关于Repository类的注解】

请提供数据。

通过给类添加注解,可以使得所有字段都可以通过getter/setter进行访问。
它还会自动为我们生成hashCode()、equals()和toString()方法。

@实体

展示了一个实体类的注释。
它可以附加在与数据库表进行映射的类上,然后生成与类名相同的表名。

@桌子

设置表名的注解。
通常情况下,将数据映射到与类名相同的表名,如果类名与表名不同,则需要设置要映射的表名。

你好Id。

在字段上添加并标示为主键的注解。

@￰瞬态

在不想进行映射(不保存在数据库中)的字段上添加注释。

请查询

通过在方法上附加这个注释,可以提供一个可以执行任意SQL的方法。
在注释的参数中写入查询。

修改

在使用@Query注释进行插入、更新和删除操作时,必须确保不使用该注释。

@Modifying
@Query("update User"
        "set"
        "password = :password"
        "where"
        "id = :id")
public Integer updateUser(@Param("password") String password, @Param("id") String id) ;

@￰联接列

在表联接时,用于指定作为条件的联接目标表的列名的注释。
附加到作为联接目标的字段上。
在name属性中指定联接目标键的列名。

@￰一对一

如果表与连接的目标表之间存在一对一的关系,则应用此注释。

@￰一对多

当表格与关联表格之间存在一对多的关系时所添加的注释。

@￰众多对一

当将表格与连接表格进行多对一的关联时,所附带的注解。

@Entity
public class Club {
  @Id
  private long clubId;

  private String clubName;

  @OneToOne
  @JoinColumn(name = "clubId")
  // clubIdが一致するStudentエンティティを結合する 
  private Student student;
}

【关于验证的注解】

@￰校验通过

在希望进行验证(输入检查)的参数类上添加注解。

@组顺序

指定执行顺序的验证注解。
从左到右依次执行设置。

@￰数据时间格式

通过指定格式,将接收到的值转换为日期类型的注释。

@￰数字格式

格式指定后,可以将接收到的值转换为数字类型的注释。

@￰非空

检查非空的注释。
※允许空字符串或空格

@￰不为空

检查注释中是否为null或空字符串。
※空格将被视为有效。

只需要一种选项的话,以下内容的汉语本地释义如下:

@￰NotBlank -> 只取一个选项

检查是否为null、空字符或非空白的注释。

@￰Max你好

检查是否小于或等于给定的值的注释。

@￰闵

检查是否大于指定的值的注解。

尺码

一个用于检查字符串长度和List大小是否在指定范围内的注解。

@￰断言为真

检查一个标注是否正确。

@断言错误

检查是否为假的注释。

@模式

检查是否与指定的正则表达式匹配的注释。

@Data
public class SampleData {
 @NotBlank
 private id;

 @NotBlank
 @Size(min = 5, max =20)
 private password;
}
@RestController
public class SampleController {
 @PostMapping
 public void create(@RequestBody @Validated SampleData data) {
  
 }
}

【关于AOP的注释】

层面

给描述Advice方法实现跨越性关注的Aspect类添加注释。

在之前

在调用中心关注的事项之前执行的方法中添加的注释。

@￰过去

给希望在调用中心关注事项后执行的方法添加注释。

@￰返回之后

在中心关注事项正常结束后执行的方法上添加注释。

在周围的周边

在调用中心关注事项之前或之后执行的方法上添加注解。

在抛出异常之后

在抛出异常后执行的方法上添加注解。

@￰注释

指定在方法上的特定注解作为执行对象的注解。

// @GetMappingが付与されたメソッドの呼び出し前に実行する
@Before("@annotation(org.springframework.web.bind.annotation.GetMapping)")
 public void sample() {
  
}

@内部

所有带有指定注解的类的所有方法都将成为AOP的目标。

// @Controllerが付与されたクラスの全メソッドの呼び出し前に実行する
@Before("@within(org.springframework.stereotype.Controller)")
 public void sample() {
  
}

【关于安全性的注释】

启用Web安全

只需要一种选项,以下是一个简化的中文翻译:

在类上添加此注解可以实现安全设置类的功能。
在实现时,需要在类上添加@￰Configuration注解,并继承WebSecurityConfigurerAdapter类。

参考文献- 引述来源的资源。

    • Spring解体新書第2版

 

    • Spring Framework超入門 優しくわかるWebアプリ開発

 

    Springドキュメント
bannerAds