SpringBoot注解整理

Java · 2023-11-25
SpringBoot注解整理

整理了一些常用和用的不熟练的注解。

SpringBoot 核心注解

@SpringBootApplication

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

@SpringBootApplication
public class MyApplication{
    public static void main(String[] args){
        SpringApplication.run(MyApplication.class, args);
    }
}

@Configuration

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

@Configuration
public class MyConfig{
    @Bean
    public Mybean bean(){
    }
}

@SpringBootConfiguration

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

@EnableAutoConfiguration

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

CompoentScan

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

@SpringBootApplication
@CompoentScan(basePackage="")
public class MyApplication{
    public static void main(String[] args){
        SpringApplication.run(MyApplication.class, args);
    }
}

@Autowired

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

@Compoent
public class MyCompoent{
    @Autowired
    private UserImpl userImpl;
}

@Value

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

@Bean

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

原型注解

@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

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

@DependsOn

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

SpringWeb常用注解

@Controller

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

@Controller
public class MyController{}

@RestController

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

@RequsetMapping

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

@RestController
@RequsetMapping("/v1")
publi class ApiController{

}

@GetMapping

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

@RestController
@RequsetMapping("/v1")
publi class ApiController{
    @GetMapping("/hello")
    public void handleHello(){}
}

@PostMapping

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

@PutMapping

同上

@DeleteMapping

同上

@RequestParma

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

@RestController
@RequsetMapping("/v1")
publi class ApiController{
    @GetMapping("/hello")
    public String handleHello(@RequestParma("name") string name){
        return "hello " + name;
    }
}

@PathVariable

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

@RestController
@RequsetMapping("/v1")
publi class ApiController{
    @GetMapping("/{name}")
    public String handleName(@PathVariable("name") String name){

    }
}

@RequestBody

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

@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

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

@ResponseStatus

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

@Cacheable

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

@CachePut

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

@CacheEvict

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

测试注解

@SpringBootTest

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

数据库相关

@Transactional

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

@Reposity

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

@Entity

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

@Id

标记主键字段

@GeneratedValue

指定主键的生成策略。

@Column

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

Java
Theme Jasmine