zoukankan      html  css  js  c++  java
  • Spring Boot 项目中常见注解

    @Autowired

    自动导入依赖的 Bean。byType方式。把配置好的 Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作

    import  org.springframework.beans.factory.annotation.Autowired;
    import  org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class CustomerController{
      @Autowired
      private CustomerService = customerService;
    }
    

    @Api--Swagger

    该注解将一个Controller(Class)标注为一个 swagger 资源(API)。在默认情况下,Swagger-Core 只会扫描解析具有 @Api 注解的类,而会自动忽略其他类别资源(JAX-RS endpoints,Servlets等等)的注解。该注解包含以下几个重要属性:

    • tags API分组标签。具有相同标签的API将会被归并在一组内展示。
    • value 如果tags没有定义,value 将作为 Api 的 tags 使用
    • description API 的详细描述,在 1.5.X 版本之后不再使用,但实际发现在2.0.0版本中仍然可以使用
    @RestController
    @RequestMapping("/api/v1/cps")
    @Api(value = "CpsDeployBatch", description = "Cps批量回滚")
    public class CpsBatchRollbackController {
        ...
    }
    

    @ApiOperation--Swagger

    @ApiOperation(value = "从xxx下载包到", notes = "")
    

    用在方法上,在指定的(路由)路径上,对一个操作或HTTP方法进行描述

    • value 对操作的简单说明,长度为120个字母,60个汉字。
    • notes 对操作的详细说明,会在接口的 Implementation Notes 下显示接口的详细说明

    @Bean

    @Bean 是方法级(不是类)注释,是XML元素的直接模拟。意思是产生一个 Bean,并交给 Spring 管理

    @ComponentScan

    组件扫描,可自动发现和装配一些 Bean

    @Component

    可配合 CommandLineRunner 使用,在程序启动后执行一些基础任务。

    Controller

    • @Controller 处理 Http 请求,用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层)。
    • @RestController Spring 框架4版本之后出来的注解,之前版本返回 json 数据需要@ResponseBody 配合 @Controller,项目中就是采用的该注解,没有采用上面的;

    @Data

    使用 Lombok 之后,将由其来自动帮你实现代码生成,比如一些 Getter/Setter 等方法。使用步骤如下:

    • IDEA 安装插键 lombok;
    • pom 依赖
    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    </dependency>
    
    • 在类上使用 @Data 注解,那么该类你就可以省略一些变量的 Getter/Setter 方法的代码了;

    lombok 插键使用:

    @EnableAutoConfiguration

    Spring Boot 自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的 classpath下存在 HSQLDB,并且你没有手动配置任何数据库连接 beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将 @EnableAutoConfiguration 或者 @SpringBootApplication 注解添加到一个@Configuration 类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用 @EnableAutoConfiguration 注解的排除属性来禁用它们。

    @override

    @Override 是 Java5 的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记。

    @Override 是伪代码,表示重写(当然不写也可以),不过写上有如下好处:

    1. 可以当注释用,方便阅读
    2. 编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错

    参考:

    @RequestMapping 配置 URL 映射关系

    @RequestMapping 提供路由信息,负责 URL 到 Controller 中的具体函数的映射。

    它是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    该注解有六个属性:

    • params:指定request中必须包含某些参数值是,才让该方法处理。
    • headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
    • value:指定请求的实际地址,指定的地址可以是URI Template 模式,别名 path
    • method:指定请求的method类型, GET、POST、PUT、DELETE等
    • consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
    • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

    在同一个注解中成对使用即可,比如示例代码中,value和path就是互为别名。但是要注意一点,@AliasFor标签有一些使用限制,但是这应该能想到的,比如要求互为别名的属性属性值类型,默认值,都是相同的,互为别名的注解必须成对出现,比如value属性添加了@AliasFor("path"),那么path属性就必须添加@AliasFor("value"),另外还有一点,互为别名的属性必须定义默认值。

    @RequestMapping 的默认属性为 value,所以下面两种方法是等价的:

    @RequestMapping(value="/example")
    @RequestMapping("/example")
    

    value属性还支持通配符模式:

    • ?:匹配单个字符

    • *:匹配多个字符,单层路径匹配

    • **:匹配多层路径

    • @GetMapping 是一个组合注解,是 @RequestMapping(method = RequestMethod.GET) 的缩写。该注解将 HTTP Get 映射到 特定的处理方法上。

    @GetMapping(value = "/helloGet")
    public String helloGet() {
        return "helloGet";
    }
    
    @RequestMapping(value = "/helloGet1",method= RequestMethod.GET)
    public String helloGet1() {
        return "helloGet1";
    }
    
    • @PostMapping 是一个组合注解,是 @RequestMapping(method = RequestMethod.POST) 的缩写。该注解将 HTTP Post 映射到 特定的处理方法上。
    @PostMapping(value = "/helloPost")
    public String helloPost() {
        return "helloPost";
    }
    
    @RequestMapping(value = "/helloPost1",method= RequestMethod.POST)
    public String helloPost1() {
        return "helloPost1";
    }
    

    @PathVariable 获取url中的数据

    @RequestMapping("/users/{username}")
    public String userProfile(@PathVariable String username){
        return "user:" + username;
    }
    
    • 这里 {username} 就是我们定义的变量规则,username 是变量的名字;
    • 需要注意的是,在默认情况下,变量中不可以包含 URL 的分隔符 /,例如路由不能匹配 /users/tianmaying/ricky,即使你认为 tianmaying/ricky 是一个存在的用户名;
    • 在默认的情况下,Spring 会对 @PathVariable 注解的变量进行自动赋值,当然你也可以指定@PathVariable 使用哪一个 URL 中的变量:
    @RequestMapping("/users/{name}")
    public String userProfile(@PathVariable("name") String username){
        return "user:" + username;
    }
    
    • 定义多个 URL 变量

    @PathVariable 注解的参数可以是一些基本的简单类型:int,long,Date,String 等,Spring 能根据 URL 变量的具体值以及函数参数的类型来进行转换,例如 /user/testUserName/intParam/5,会将 testUserName 的值赋给 username,而 5 赋值给 int 变量 num

    @RequestMapping("/user/{username}/intParam/{num}")
    public String getUserInfo(@PathVariable String username , @PathVariable int num){
        return "user: " + username + ";intParam:" + num;
    }
    

    @Qualifier

    当有多个同一类型的 Bean 时,可以用 @Qualifier(“name”) 来指定。与 @Autowired 配合使用。@Qualifier 限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:

    @Autowired
    @Qualifier(value = “demoInfoService”) 
    private DemoInfoService demoInfoService;
    

    @RequestParam 获取请求参数的值

    @RequestMapping("/user/test")
    public String getUserName1(@RequestParam("userName") String userName) {
        return "userName = " + userName;
    }
    

    对应的 URL 会组成类似这样的:**/user/test?userName=michael

    一旦我们在方法中定义了 @RequestParam 变量,如果访问的 URL 中不带有相应的参数,就会抛出异常——这是显然的,Spring尝试帮我们进行绑定,然而没有成功。

    但有的时候,参数确实不一定永远都存在,这是我们可以通过定义 required 属性,当然,在参数不存在的情况下,可以给变量定义一个默认值:

    @RequestMapping("/user/test")
    public String getUserName1(@RequestParam(name="userName",required = false, defaultValue="admin") String userName) {
        return "userName = " + userName;
    }
    

    用在方法的参数前面,来映射请求参数,在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法。这个注解属于 Spring。

    • value,对应 url 提交的 ?id=xx 中的 id,参数名
    • defaultValue,该参数的默认值,当 url 中 id 值没有传输时将使用这个参数进行赋值
    • required,是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常

    Ref:

    @SpringBootApplication

    申明让 Spring Boot自动给程序进行必要的配置,这个配置等同于:@Configuration@EnableAutoConfiguration@ComponentScan 三个配置

    @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan 
    public class Application { 
        public static void main(String[] args) { 
            SpringApplication.run(Application.class, args); 
        } 
    }
    

    @Value

    Spring @Value 注释用于为变量和方法参数指定默认值。我们可以使用 @Value 注释来读取 Spring 环境变量以及系统变量 。

    注意:当要给静态变量注入值的时候,若是在静态变量声明之上直接添加 @Value() 注解是无效的

    总结

    声明 bean 的注解

    • @Component 组件,没有明确的角色
    • @Service 在业务逻辑层使用(service 层)
    • @Repository 在数据访问层使用(dao 层)
    • @Controller 在展现层使用,控制器的声明(controller 层)

    注入bean的注解

    • @Autowired:由Spring提供
    • @Inject:由JSR-330提供
    • @Resource:由JSR-250提供

    基础知识

    参考

    Spring 注解

    Swagger 注解

  • 相关阅读:
    [排错] VO对象和POJO对象的关系
    celery(异步处理)+redis
    django开发经验(每日生鲜)
    开发流程
    linux 使用问题
    磁盘的操作
    文件系统的简单操作
    LINUX磁盘与档案系统
    文件操作
    Linux文档修改
  • 原文地址:https://www.cnblogs.com/michael-xiang/p/10468071.html
Copyright © 2011-2022 走看看