【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路径中提取值。

@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ドキュメント