SpringBoot常见注解

一、Spring Web MVC注解

1.1 @RequestMapping

@RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射。SpringMVC通过RequestMappingHandlerMappingRequestMappingHandlerAdapter两个类来提供对@RequestMapping注解的支持。
@RequestMapping注解对请求处理类中的处理方法进行标注:@RequestMapping注解拥有以下六个配置的特性:

  • value:映射的请求URL或其他别名
  • method:兼容HTTP的方法名
  • params:根据HTTP参数的存在、缺省或值,对请求进行处理
  • header:根据HTTP Header的存在、缺省或值,对请求进行过滤
  • consume:设定在HTTP请求正文中允许使用的媒体类型
  • product:在HTTP响应体中允许使用的媒体类型

注意:
在使用@RequestMapping之前,要对请求处理的类使用@Controller或@RestController注解。

@RestController
public class TestController {

    @RequestMapping(value = "/demo/test", method = RequestMethod.POST)
    public String test() {
        return "/test";
    }
}
@RestController
@RequestMapping(value = "/demo")
public class TestController {

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public String test() {
        return "/test";
    }
}
1.2@RequestBody

@RequestBody在处理请求方法的参数列表中使用,它可以将请求参数绑定到一个对象中,请求主体参数是通过 HttpMessageConverter传递的,根据请求主体中的参数名与对象的属性名进行匹配并绑定值。此外,还可以通过@Valid注解对请求主体中的参数进行校验。

@RestController
@RequestMapping(value = "/order")
public class TestController {

    @Autowired
    private OrderService orderService;

    @PostMapping("/create")
    public OrderDTO createOrder(@Valid @RequestBody OrderDTO orderDTO){
        return orderService.create(orderDTO);
    }
}
1.3 @GetMapping

@GetMapping注解用于处理HTTP GET请求,并将请求映射到具体的处理方法中。具体的说,@GetMapping是一个组合注解,它相当于是@RequestMapping(method=RequestMethod.GET)

@GetMapping的使用示例:

@RestController
@RequestMapping(value = "/order")
public class TestController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/find/{id}")
    public OrderDTO findOneById(@PathVariable(name = "id") String id){
        return orderService.findOne(id);
    }
}
1.4 @PutMapping

@PutMapping注解用于处理HTTP PUT请求,并将请求映射到具体的处理方法中。具体的说,@PutMapping是一个组合注解,它相当于是@RequestMapping(method=RequestMethod.PUT)

@PutMapping的使用示例:

@RestController
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @PutMapping("/paid/{id}")
    public OrderDTO paid(@PathVariable(name = "id") String id){
        OrderDTO orderDTO = orderService.findOne(id);
        return orderService.paid(orderDTO);
    }
}
1.5 @PostMapping

@PostMapping注解用于处理HTTP POST请求,并将请求映射到具体的处理方法中。具体的说,@PostMapping是一个组合注解,它相当于是@RequestMapping(method=RequestMethod.POST)

@PostMapping的使用示例:

@RestController
@RequestMapping(value = "/order")
public class TestController {

    @Autowired
    private OrderService orderService;

    @PostMapping("/orders")
    public OrderDTO cancelOrder(@Valid @RequestBody OrderDTO orderDTO){
        return orderService.cancel(orderDTO);
    }
}
1.6 @DeleteMapping

@DeleteMapping注解用于处理HTTP DELETE请求,并将请求映射到具体的处理方法中。具体的说,@DeleteMapping是一个组合注解,它相当于是@RequestMapping(method=RequestMethod.DELETE)

@DeleteMapping的使用示例:

@RestController
@RequestMapping(value = "/order")
public class TestController {

    @Autowired
    private OrderService orderService;

    @DeleteMapping("/cancel/{id}")
    public OrderDTO cancelOrder(@PathVariable(name = "id") String id){
        OrderDTO orderDTO = orderService.findOne(id);
        return orderService.cancel(orderDTO);
    }
}
1.7 @PatchMapping

@PatchMapping注解用于处理HTTP PATCH请求,并将请求映射到具体的处理方法中。具体的说,@PatchMapping是一个组合注解,它相当于是@RequestMapping(method=RequestMethod.PATCH)

@PatchMapping的使用示例:

@RestController
@RequestMapping(value = "/order")
public class TestController {
    @PatchMapping("/orders/patch")
    public ResponseEntity<Object> patch(){
        return new ResponseEntity<>("Patch method response message", HttpStatus.OK);
    }
}
1.8 @ResponseBody

@ResponseBody会将Controller层中的方法返回值写入到HTTP响应中。@ResponseBody只能用在@Controller注解标记的类中。如果在被@RestController注解标记的类中,则不需要@ResponseBody注解进行标注。@RestController相当于是@Controller和@ResponseBody的组合注解。

@ResponseBody的使用示例:

@Controller
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;
    
    @ResponseBody
    @PutMapping("/orders/{id}")
    public OrderDTO findById(@PathVariable(name = "id") String id){
        return orderService.findOne(id);
    }
}
1.9 @PathVariable

@PathVariable注解是将方法中的参数绑定到请求URI的模板变量上。可以通过@RequestMapping注解来指定URI的模板变量,然后使用@PathVariable注解将方法中的参数绑定到模板上,@PathVariable注解允许我们使用value或name属性给参数取一个别名。
@PathVariable的使用示例:

@Controller
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @ResponseBody
    @PutMapping("/orders/{id}")
    public OrderDTO findById(@PathVariable(name = "id") String id){
        return orderService.findOne(id);
    }
}

模板变量名需要使用“{ }”进行包裹,如果方法的参数名与URI模板变量名一致,则在@PathVariable中就可以省略别名的定义。
简单示例:

@Controller
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @ResponseBody
    @PutMapping("/orders/{id}")
    public OrderDTO findById(@PathVariable String id){
        return orderService.findOne(id);
    }
}

提示:如果参数是一个非必须的,可选的项,则可以在@PathVariable中设置require = false,默认是true

1.10@RequestParam

@RequestParam注解用于将方法的参数与web请求的传递的参数进行绑定。使用@RequestParam可以轻松获取HTTP请求参数的值。
@RequestParam的使用示例:

@Controller
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @ResponseBody
    @PutMapping("/orders/{id}")
    public OrderDTO findById(@RequestParam(name = "id") String id ){
        return orderService.findOne(id);
    }
}

@RequestParam注解的其他属性配置与@PathVariable的配置相同,特别的是,如果传递的参数为空,还可以通过defaultValue设置一个默认值。
示例代码如下:

@Controller
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @ResponseBody
    @GetMapping
    public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
        return orderService.findOne(id);
    }
}
1.11 @Controller

@Controller是@Component注解的一个延伸,Spring会自动扫描并配置被该注解标注的类。此注解用于标注Spring MVC的控制器。
@Controller的使用示例:

@Controller
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @ResponseBody
    @PutMapping("/orders/{id}")
    public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
        return orderService.findOne(id);
    }
}
1.12 @RestController

@RestController是再Spring 4.0开始引入的,这是一个特定的控制器注解。此注解是一个组合注解相当于,@Controller和@ResponseBody的快捷方式,当使用此注解时,不需要在方法上使用@ResponseBody注解。
@RestController的使用示例:

在这里插入代码片
@RestController
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @PutMapping("/orders/{id}")
    public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
        return orderService.findOne(id);
    }
}

2、Spring Bean注解

2.1 @ComponentScan

@ComponentScan用于配置Spring需要扫描的被组件注解注释的类所在的包,可以通过配置其basePackages属性或者value属性来配置需要扫描的包路径。value属性是basePackages的别名。
@ComponentScan的使用示例:

@Configuration
@ComponentScan(basePackages = "com.henya.config")
public class TestConfig {
    // ...
}
2.2 @Component

@Component注解用于标注一个普通的组件类,它没有明确的业务范围,只是告知Spring被此注解标注的类需要被纳入到Spring Bean容器中进行管理。
@Component的使用示例:

@Component
public class TestConfig {

    public void testComponent(){
        // ...
    }
}
2.3 @Service

@Service注解是@Component的一个延伸(特例),它用于标注业务逻辑类。与@Component注解一样,被此注解标注的类,会自动被Spring所管理。
@Service的使用示例:

@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductInfoDao productInfoDao;

    @Override
    public ProductInfo findOne(String productId) {
        return productInfoDao.findOne(productId);
    }
}
2.4 @Repository

@Repository注解是@Component注解的延伸,与@Component注解一样,被此注解标注的类会被Spring容器管理起来,@Repository注解用于标注DAO层的数据持久化类。
@Repository的使用示例:

@Repository
public interface TestRepository extends JpaRepository<OrderDTO, String> {
    // ...
}

3、容器配置注解

3.1@Autowired

@Autowired注解用于标记Spring将要解析和注入的依赖项。此注解可以作用在构造函数,字段和Setter方法上。
作用在构造函数示例:

@RestController
public class TestController {
    private OrderService orderService;

    @Autowired
    TestController(OrderService orderService){
        this.orderService = orderService;
    }
}

作用在字段示例:

@RestController
@RequestMapping(value = "/order")
public class TestController {
    @Autowired
    private OrderService orderService;

    @PutMapping("/orders/{id}")
    public OrderDTO findById(@RequestParam(name = "id", defaultValue = "1") String id ){
        return orderService.findOne(id);
    }
}

作用在Setter方法上示例:

@RestController
public class TestController {
    private OrderService orderService;

    @Autowired
    public void setOrderService(OrderService orderService){
        this.orderService = orderService;
    }
}
3.2 @Primary

当系统中需要配置多个具有相同类型的Bean时,@Primary可以定义这些Bean的优先级。
@Primary的使用示例:

public interface MessageService {
    String sendMessage();
}

@Primary
@Component
public class EmailMessageImpl implements MessageService {
    @Override
    public String sendMessage() {
        return "this is send email method message";
    }
}

@Component
public class DingDingMessageImpl implements MessageService {
    @Override
    public String sendMessage() {
        return "this is send dingding method message";
    }
}

@Component
public class WeChatMessageImpl implements MessageService {

    @Override
    public String sendMessage() {
        return "this is send wechat method message";
    }
}

@RestController
public class MessageController {
    @Autowired
    private MessageService messageService;

    @GetMapping("/info")
    public String info(){
        return messageService.sendMessage();
    }
}

输出结果为this is send email method message,说明EmailMessageImpl 的优先级较高。

四、Spring Boot注解

4.1@SpringBootApplication

@SpringBootApplication是一个快捷的配置注解,被他标注的类中,可以定义一个或多个Bean,并自动触发自动配置Bean和自动扫描组件。此注解相当于是@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。SpringBoot主程序类中,就是用来此注解。
@SpringBootApplication的使用示例:

@SpringBootApplication
public class SellApplication {

	public static void main(String[] args) {
		SpringApplication.run(SellApplication.class, args);
	}
}
4.2 @EnableAutoConfiguration

@EnableAutoConfiguration注解用于告知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项。

4.3 @ConditionalOnClass与@ConditionalOnMissingClass

这两个注解属于类条件注解,它们根据是否存在某个类作为判断依据来决定是否要执行某些配置。
简单使用示例:

@Configuration
@ConditionalOnClass(OrderDTO.class)
public class MessageController {
  // ...
}
4.4 @ConditionalOnBean与@ConditionalOnMissingBean

这两个注解属于对象条件注解,根据是否存在某个对象作为依据来决定是否要执行某些配置方法。
简单使用示例:

@Bean
@ConditionalOnBean
LocalContainerEntityManagerFactoryBean entityManagerFactory(){
        // ...
}
@Bean
@ConditionalOnMissingBean
public LocalContainerEntityManagerFactoryBean myBean(){
       // ...
}
4.5 @ConditionalOnProperty

@ConditionalOnProperty注解会根据Spring配置文件中的配置项是否满足配置要求,从而决定是否要执行被标注的方法。

4.6 @ConditionalOnResource

@ConditionalOnResource注解是当某个配置文件存在时,则执行被其标注的方法。

4.7 @ConditionalOnWebApplication与@ConditionalOnNotWebApplication

这两个注解用于判断当前应用程序是否是Web应用程序。如果是Web应用程序,则使用Spring WebApplicationContext,并定义其会话的生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值