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常用注解
发布评论