@SpringBootApplication
@SpringBootApplication是一个组合注解,相当于三个注解的功能:
@SpringBootConfiguration: 相当于一种特殊的@Configuration注解。@Configuration注解的作用是将该类声明为配置类。@EnableAutoConfiguration: 开启SpringBoot的自动配置功能,自动装配应用需要的Component。@ComponentScan: 启用组件扫描,让Spring自动发现使用@Component/@Controller/@Service等注解标注的类。
@Controller / @Service / @Repository
除了名字之外,这些注解的功能是完全相同的。它们的主要功能都是让@ComponentScan将这个类识别为一个组件,并创建这个类的Bean加入容器中。声明不同的注解有助于识别不同类的职责。
Lombok常用注解
@Data
@Data告诉Lombok在编译时生成所有缺失的方法:getter / setter / toString / hashCode / etc.
使用Idea结构举例,一个拥有三个域的类User:
public class User {
private int id;
private String userName;
private int age;
}
在Idea中的结构是:
而当在类上标注@Data后,结构变为
显然,@Data为该类添加了:
- 所有域的getter和setter
- 无参构造函数
equals()/canEqual()/toString()/hashCode()函数
@RequiredArgsConstructor
这个注解会生成一个以被final修饰或者被@NonNull标注的域为参数的构造函数,如果没有符合条件的域就生成一个无参构造函数。
同样以User类为例,用@NonNull标注域id,用final修饰域userName,再在类上标注@RequiredArgsConstructor:
@RequiredArgsConstructor
public class User {
@NonNull
private int id;
final private String userName;
private int age;
}
Idea中该类的结构变为:
@Slf4j
Slf4j的全称为Simple Logging Facade for Java。@Slf4j的作用是创建一个当前类的日志变量,不再需要在类内声明一遍log变量。
类内的log变量相当于来自于语句:
Logger log = org.sjf4j.LoggerFactory.getLogger(this.class);
@RequestMapping
@RequestMapping是一个类级别的注解,将类标注为处理HTTP请求的类。该注解可以接受用于指定处理路径的path参数,和用于细分处理HTTP请求的method参数。
@RequestMapping(path = "/home", method = RequestMethod.GET) // 处理对于路径`/home`的HTTP GET请求
class HomeController {...}
在实际情况中,通常使用另一套注解代替:
| 注解 | 描述 |
|---|---|
@GetMapping | 处理HTTP GET请求 |
@PostMapping | 处理HTTP POST请求 |
@PutMapping | 处理HTTP PUT请求 |
@DeleteMapping | 处理HTTP Delete请求 |
@PatchMapping | 处理HTTP Patch请求 |
以上的5个注解不能用于类,只能用于方法。其中@xxxMapping("yyy")等价于@RequestMapping(path = "yyy", method = RequestMethod.xxx)。
方法注解处理的路径接在类注解处理的路径之后。例如,类注解为@RequestMapping("/class"),而方法注解为@GetMapping("/method"),则方法处理的是对于路径/class/method的HTTP GET请求。