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 注解

  • 相关阅读:
    java编译错误No enclosing instance of type TestFrame is accessible. Must qualify the allocation with an enclosing instance of type TestFrame (e.g. x.new A(
    java 2中创建线程方法
    动态规划基本思想
    关于eclipse编译一个工程多个main函数
    java Gui初识
    Eclipse中java项目的打包
    java 播放声音
    把资源文件夹导入到eclipse中
    Java建立JProgressBar
    How to grant permissions to a custom assembly that is referenced in a report in Reporting Services
  • 原文地址:https://www.cnblogs.com/michael-xiang/p/10468071.html
Copyright © 2011-2022 走看看