Spring常用注解

启动类

在启动类(XxxApplication)上使用的注解。

@SpringBootApplication

Spring Boot的项目一般都会有XxxApplication的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。
这个入口类都会有@SpringBootApplication注解,它让Spring Boot自动给程序进行必要的配置,该注解是SpringBoot项目特有的。
这个配置等同于以下几个注解之和:
@SpringBootConfiguration:表示Application作为配置文件存在
@EnableAutoConfiguration:表示启用SpringBoot内置的自动配置功能
@ComponentScan : 扫描bean,路径为Application类所在package以及package下的子路径,在spring boot中bean都放置在该路径以及子路径下。
【示例】

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

@MapperScan

通过使用@MapperScan可以指定要扫描的Mapper类的包的路径。相比要在每个Mapper类上使用@Mapper注解,这种方式更简便快捷。
@MapperScan可以指定要扫描的一个包或多个包,甚至以mapper为类名后缀的类。
【示例】

@SpringBootApplication
@MapperScan({"com.kfit.*.mapper","org.kfit.*.mapper"}) 
public class App { 
    public static void main(String[] args) { 
        SpringApplication.run(App.class, args); 
    } 
}

表现层

在Controller层使用的注解,包括类上、方法上、方法参数上。

@Controller系列

使用在类上,表示是Controller层,包括@RestController 和@Controller。

@RestController
public class TestController {
    @RequestMapping("/test")
    public String test(){
        return "test!";
    }
}

注意:@RestController用于处理HTTP请求,@RestController= @Controller +@ResponseBody
其中@ResponseBody将java对象转为json格式的数据。
@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
在使用@ResponseBody注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用,如AJAX。

@RequestMapping系列

使用在类或方法上,用于配置url映射,即请求路径。
@GetMapping组合注解相当于 @RequestMapping(method = RequestMethod.GET)
@PostMapping 组合注解相当于 @RequestMapping(method = RequestMethod.POST)

@GetMapping("/add")
public void addUser(@RequestParam("name")String name){

}

注意:@RestController 和 @ RequestMapping 是 SpringMVC 的注解,不是 SpringBoot 特有的注解。

@RequestBody

使用在方法参数上,用来接收json格式请求参数。

@PathVariable

用在方法参数上。

@RequestParam

使用在方法参数上,是springmvc中接收普通参数的注解。
请求中的参数名和处理器中的形参名不一致时用 @RequestParam。
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
value:参数名
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值。

@RequestHeader

使用在方法参数上,用于获取请求头中的数据,通过指定参数 value 的值来获取请求头中指定的参数值。其他参数用法和 @RequestParam 完全一样。
语法:@RequestHeader(value=”参数名”,required=”true/false”,defaultValue=””)

业务层

@Service

持久层

@Repository

@Mapper

配置类

在类上使用注解@Configuration,该类就是配置类。

@Configuration

从Spring3.0,@Configuration用于定义配置类,替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@Bean

使用在方法上,给容器中注册一个Bean,即实例放到Spring容器中。
该实例类型为返回值的类型,实例id默认是用方法名作为id。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration //表示配置文件 
public class JavaConfig {
	//spring调用这个方法直接把FunctionService这个类实例加入到spring容器中
  @Bean 
  public FunctionService functionService(){
    return new FunctionService();
  }
}

由于@SpringBootApplication是由@Configuration组成,所以可以在启动类里面使用@Bean.

任意层

@Component

@Component, @Service, @Controller, @Repository是Spring注解,注解后可以被Spring框架所扫描并注入到Spring容器来进行管理。
@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能。

@value

用于读取配置文件配置的参数,@Value用于properties文件或yaml文件配置的属性值。
【示例】
配置文件:

hello.world=你好

Java代码:

    @Value("${hello.world}")
    private String hello;

@value也可以设置默认值,如果配置文件没有该参数,将会采用默认值,语法是参数名称和默认值使用冒号连接。
【示例】

    @Value("${hello.world:我很好}")
    private String hello;

生成Bean

@Autowired:自动导入依赖的bean。
@Resource:@Autowired与@Resource都可以用来装配bean,都可以写在字段上或写在setter方法上。

测试

比如在IDEA开发工具的test模块对代码进行测试,此时在类上使用@RunWith(SpringRunner.class)和@SpringBootTest注解,方法上使用@Test注解。
注意:
(1)测试类的所在目录名称和启动类所在目录名称要一致,否则报错:

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

(2)在类上单独使用@SpringBootTest注解也可以运行测试用例,但如果在测试类中使用@Autowired等注解生成bean,必须加@RunWith(SpringRunner.class)注解。

@RunWith(SpringRunner.class)
@SpringBootTest
public class EsTest {
    @Test
    void contextLoads() {
    }
}

(3)对于@Test注解,它来自于org.junit.Test,可能会使用org.junit.jupiter.api.Test;此时报错:

报错:org.junit.runners.model.InvalidTestClassError: Invalid test class

Spring Cloud常用注解

ribbon

@LoadBalanced

在使用springcloud ribbon客户端负载均衡的时候,可以给RestTemplate bean 加一个@LoadBalanced注解,就能让这个RestTemplate在请求时拥有客户端负载均衡的能力。

@Bean
@LoadBalanced //开启负载均衡的功能
RestTemplate restTemplate() {
    return new RestTemplate();
}

更多推荐

总结SpringBoot常用注解