在做Java后端开发中,注解的使用,不仅简化了我们的代码,使我们的代码看着更加清爽,而且提高了开发效率。下面总结了Spring的一些常用注解,分为Web和容器两部分:

Web

@Controller

对应Spring MVC控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

@RestController

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器。
单独使用@Controller不加@ResponseBody的话,一般使用在要返回一个视图的情况,这种情况属于比较传统的 Spring MVC 的应用,对应于前后端不分离的情况。@Controller+@ResponseBody 返回 JSON 或 XML 形式数据。

@RequestMapping:

映射访问路径。例如:映射访问路径/listCategory路径到方法listCategory()。根据请求类型不同,使用不同的注解。
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping

@PathVariable

接受路径参数

@PostMapping("/view/{id}")
@ApiOperation(value = "根据id查询文章")
public Result findArticleById(@PathVariable("id")Long id){
    log.debug("articleId:{}",id);
    ArticleVo articleVo = articleService.findArticleById(id);
    return Result.success(articleVo);
}

@RequestBody

将request请求的参数以bean对象接受,而不是直接链接在地址后面。

@PostMapping
public Result register(@RequestBody LoginParams loginParams){
    return loginService.register(loginParams);
}

容器

@Autowired:

自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。一般使用 @Autowired 注解让 Spring 容器帮我们自动装配 bean。把类标识成可用于@Autowired注解自动装配的bean的类,可以采用以下注解实现:

@RestController
@RequestMapping("/users")
@Api(tags = "账号信息")
public class UserController {

    @Autowired
    private SysUserService sysUserService;

    @GetMapping("/currentUser")
    public Result currentUser(@RequestHeader("Authorization")String token){
        return sysUserService.findUSerByToken(token);
    }
}

@Component:

通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。

@Repository :

对应持久层即Dao层,主要用于数据库相关操作。

@Service :

对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层。

@Scope:

声明Spring Bean的作用域。
四种常见的Spring Bean的作用域:
● singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
● prototype : 每次请求都会创建一个新的 bean 实例。
● request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
● session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

@Configuration:

一般用来声明配置类,可以使用 @Component注解替代,不过使用@Configuration注解声明配置类更加语义化。

@Configuration
@MapperScan("com.ym.blog.api.dao.mapper")
public class MybatisPlusConfig {

    // 分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

@Value

读取配置信息

@RestController
public class FileController {

    @Value("minio.enable")
    private boolean isOpenMinio;
}

@ConfigurationProperties

读取配置信息,并与bean绑定

minio:
  endpoint: http://localhost:9000
  accesskey: minioadmin
  secretkey: minioadmin
  bucketName: blog
  enable: true // 是否打开minio
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
    //连接url
    private String endpoint;

    //公钥
    private String accesskey;

    //私钥
    private  String secretkey;

    //桶名称
    private String bucketName;
}

@Qualifier

搭配 @Autowired 一起使用,当想对注入的过程做更多的控制,@Qualifier 可帮助配置,比如两个以上相同类型的 Bean 时 Spring 无法抉择,用到此注解。

@Bean

  • @Bean 注解作用在方法上,指示一个方法返回一个 Spring 容器管理的 Bean
  • @Bean 方法名与返回类名一致,首字母小写
  • @Bean 一般和 @Component 或者 @Configuration 一起使用
  • @Bean 注解默认作用域为单例 singleton 作用域,可通过 @Scope(“prototype”) 设置为原型作用域