Sat Nov 25 2023
1546 words · 10 minutes

SpringBoot注解整理


Table of Contents

SpringBoot 核心注解 Link to SpringBoot 核心注解

@SpringBootApplication Link to @SpringBootApplication

标识这是一个springboot应用,这个注解是SpringBootConfiguration EnableAutoConfigurationCompoentScan的结合体。

JAVA
1
2
3
4
5
6
@SpringBootApplication
public class MyApplication{
    public static void main(String[] args){
        SpringApplication.run(MyApplication.class, args);
    }
}

@Configuration Link to @Configuration

用它来代替applicationContext.xml文件,可以在这个注解下进行配置。通常用来自定义Bean

JAVA
1
2
3
4
5
6
@Configuration
public class MyConfig{
    @Bean
    public Mybean bean(){
    }
}

@SpringBootConfiguration Link to @SpringBootConfiguration

Configuration 注解的变体,用来修饰 springboot的配置。

@EnableAutoConfiguration Link to @EnableAutoConfiguration

允许springboot自动配置注解,开启之后,springboot会在自动配置Bean

CompoentScan Link to CompoentScan

自动扫描@Compoent注解,包括@Service @Controller @Repository注册bean到context

JAVA
1
2
3
4
5
6
7
@SpringBootApplication
@CompoentScan(basePackage="")
public class MyApplication{
    public static void main(String[] args){
        SpringApplication.run(MyApplication.class, args);
    }
}

@Autowired Link to @Autowired

可以自动把一个Bean注入到当前类中。默认情况下是根据类型进行匹配,可以用@Qualifier 进行限制

JAVA
1
2
3
4
5
@Compoent
public class MyCompoent{
    @Autowired
    private UserImpl userImpl;
}

@Value Link to @Value

从配置文件或者环境变量获取值。

@Bean Link to @Bean

用于定义一个Bean,放到IOC容器中。一般在@Configuration中使用。

原型注解 Link to 原型注解

@Scope Link to @Scope

常用于设置Bean的作用域,包括 Singleton、Prototype、Request、Session 等。默认情况下,Bean 是 Singleton 的。

  • Singleton: 默认,单例模式,全局仅有一个实例
  • Prototype: 原型模式:每次获取Bean,都会有一个实例
  • Request: 针对每一次Http都会创建一个实例,同时该实例仅在当前的Http Requset有效
  • Session: 针对每次HTTP请求都会创建一个实例,同时该实例仅在当前的HTTP Session中有效

直接用字符串会有问题,用默认的参数:

  • ConfigurableBeanFactory.SCOPE_PROTOTYPE
  • ConfigurableBeanFactory.SCOPE_SINGLETON
  • WebApplicationContext.SCOPE_REQUEST
  • WebApplicationContext.SCOPE_SESSION

大部分业务直接用Singleton就可以,但是如果实例内有非静态变量,就会导致线程安全问题。 设置为Prototype的时候,每次连接都会生成一个实例,GC频繁,性能下降。

@Lazy Link to @Lazy

用于设置Bean的延迟初始化。当IOC从XML文件、java配置或其他方式加载的时候,不会初始化这个Bean。

@DependsOn Link to @DependsOn

表示Bean之间的依赖关系。IOC启动的时候,先创建@DependsOn标识的Bean。

SpringWeb常用注解 Link to SpringWeb常用注解

@Controller Link to @Controller

标志着类是一个SpringMVC控制器,用来处理HTTP请求

JAVA
1
2
@Controller
public class MyController{}

@RestController Link to @RestController

他是 @Controller 和 @ResponseBody,用于创建Restful风格的控制器,表示控制器所有方法返回的都是Json格式的。

@RequsetMapping Link to @RequsetMapping

用于映射Http请求,可以用value属性指定URL请求,可以用Method指定请求方法。

JAVA
1
2
3
4
5
@RestController
@RequsetMapping("/v1")
publi class ApiController{

}

@GetMapping Link to @GetMapping

相当于 @RequsetMapping(method=RequestMethod.GET)

JAVA
1
2
3
4
5
6
@RestController
@RequsetMapping("/v1")
publi class ApiController{
    @GetMapping("/hello")
    public void handleHello(){}
}

@PostMapping Link to @PostMapping

相当于 @RequsetMapping(method=RequsetMethod.Post)

@PutMapping Link to @PutMapping

同上

@DeleteMapping Link to @DeleteMapping

同上

@RequestParma Link to @RequestParma

用于将请求参数映射到方法的参数当中,可以使用value属性指定参数名,required指定是否必填,defaultValue指定默认值

JAVA
1
2
3
4
5
6
7
8
@RestController
@RequsetMapping("/v1")
publi class ApiController{
    @GetMapping("/hello")
    public String handleHello(@RequestParma("name") string name){
        return "hello " + name;
    }
}

@PathVariable Link to @PathVariable

用于把URL的占位符映射到方法的参数中。可以使用value属性指定占位符名称。

JAVA
1
2
3
4
5
6
7
8
@RestController
@RequsetMapping("/v1")
publi class ApiController{
    @GetMapping("/{name}")
    public String handleName(@PathVariable("name") String name){

    }
}

@RequestBody Link to @RequestBody

用于从请求体中获取数据。通常处理Post,Put请求

JAVA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
@RequestMapping("/api")
public class MyController {
    @PostMapping("/greeting")
    public String greeting(@RequestBody GreetingRequest request) {
        return "Hello, " + request.getName() + "!";
    }
}

@Data
public class GreetingRequest {
    private String name;
}

@ResponseBody Link to @ResponseBody

注解表示该方法返回的结果直接输出到响应体中。

@ResponseStatus Link to @ResponseStatus

注解用于指定请求处理完成后的状态码。

@Cacheable Link to @Cacheable

表示该方法的结果被缓存,假如参数相同,就调用缓存的结果。

@CachePut Link to @CachePut

表示方法的结果应该被缓存起来,下次调用该方法时,不会返回缓存结果,而是重新计算结果并缓存起来。

@CacheEvict Link to @CacheEvict

表示方法执行后从缓存中删除指定项。

测试注解 Link to 测试注解

@SpringBootTest Link to @SpringBootTest

它会创建一个完整的 Spring 应用程序上下文,并在测试期间使用它

数据库相关 Link to 数据库相关

@Transactional Link to @Transactional

用于指定一个方法需要在事务中执行。默认情况下,只有 RuntimeException 会触发事务回滚。

@Reposity Link to @Reposity

用于标记数据访问层,表示这个类是一个数据仓库

@Entity Link to @Entity

用于标记实体类,表示这个类是一个JPA实体,与数据库中的表对应。

@Id Link to @Id

标记主键字段

@GeneratedValue Link to @GeneratedValue

指定主键的生成策略。

@Column Link to @Column

指定实体属性和数据库表之间的映射关系。

Thanks for reading!

SpringBoot注解整理

Sat Nov 25 2023
1546 words · 10 minutes