前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot(05):从@Controller到@Scheduled,Spring Boot注解全家桶等你来探索!

Spring Boot(05):从@Controller到@Scheduled,Spring Boot注解全家桶等你来探索!

作者头像
bug菌
发布2023-09-06 13:36:39
1810
发布2023-09-06 13:36:39
举报
文章被收录于专栏:《项目实战教学》
代码语言:javascript
复制
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

1. 前言

        Spring Boot是Spring家族中最受欢迎的开源框架之一,它可以通过注解的方式简化开发过程,使开发人员能够更加专注于业务逻辑的实现。本文将介绍Spring Boot中常用的注解,并讲解如何轻松实现开发、测试和生产环境的切换。

2. 摘要

        本文将介绍Spring Boot中常用的注解,包括@Controller、@RestController、@RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@RequestBody、@ResponseBody、@RequestParam、@PathVariable、@Configuration、@Bean、@Value、@Profile、@PropertySource、@EnableAutoConfiguration和@Conditional等。并且将通过案例演示如何使用这些注解来简化开发过程。另外,本文还将讲解如何通过配置文件实现开发、测试和生产环境的切换。

3. 常用注解

3.1 @Controller和@RestController注解

        @Controller和@RestController注解将一个POJO类标记为Spring MVC的Controller。其中,@RestController是Spring 4之后新加入的注解,它是@Controller和@ResponseBody注解的结合体。当我们使用@RestController注解时,方法的返回值将直接作为响应体返回给客户端,而不需要再使用@ResponseBody注解。

下面是一个使用@Controller注解的示例:

代码语言:javascript
复制
@Controller
public class HelloWorldController {

    @RequestMapping("/hello")
    public String sayHello() {
        return "Hello World";
    }
}

        可以看到,使用@Controller注解的Controller类中的方法返回值是String类型,它指定了要渲染的视图的名称。而如果使用@RestController注解,则可以直接返回实体对象或者集合,如下所示:

代码语言:javascript
复制
@RestController
public class HelloWorldRestController {

    @RequestMapping("/hello")
    public String sayHello() {
        return "Hello World";
    }
}

3.2 @RequestMapping、@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解

        @RequestMapping注解是Spring MVC中最常用的注解之一,它可以用来映射HTTP请求到Controller的处理方法。而@GetMapping、@PostMapping、@PutMapping和@DeleteMapping等注解都是RequestMapping注解的变种。

下面是一个使用@RequestMapping注解的示例:

代码语言:javascript
复制
@RestController
public class HelloWorldRestController {

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String sayHello() {
        return "Hello World";
    }
}

3.3 @RequestBody和@ResponseBody注解

        @RequestBody注解用于将HTTP请求的正文绑定到方法的参数上,而@ResponseBody注解用于将方法的返回值绑定到HTTP响应的正文上。

下面是一个使用@RequestBody和@ResponseBody注解的示例:

代码语言:javascript
复制
@RestController
public class UserController {

    @PostMapping("/user")
    public User addUser(@RequestBody User user) {
        return userService.addUser(user);
    }

    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

        可以看到,使用@RequestBody注解的方法参数会自动将HTTP请求的正文解析成指定的对象类型。而使用@ResponseBody注解的方法返回值会自动将对象序列化成JSON格式的字符串并写入HTTP响应的正文中。

3.4 @RequestParam和@PathVariable注解

        @RequestParam注解用于从HTTP请求中获取参数的值,并将其绑定到方法的参数上。而@PathVariable注解用于从URL路径中获取参数的值,并将其绑定到方法的参数上。

下面是一个使用@RequestParam和@PathVariable注解的示例:

代码语言:javascript
复制
@RestController
public class UserController {

    @GetMapping("/user")
    public List<User> getUserList(@RequestParam String name) {
        return userService.getUserListByName(name);
    }

    @DeleteMapping("/user/{id}")
    public void deleteUserById(@PathVariable Long id) {
        userService.deleteUserById(id);
    }
}

        可以看到,使用@RequestParam注解的方法参数会自动从HTTP请求中获取参数值。而使用@PathVariable注解的方法参数会自动从URL路径中获取参数值。

示例截图如下:

Spring Boot(05):从@Controller到@Scheduled,Spring Boot注解全家桶等你来探索!_spring boot
Spring Boot(05):从@Controller到@Scheduled,Spring Boot注解全家桶等你来探索!_spring boot

3.5 @Configuration和@Bean注解

        @Configuration注解用于标记一个类为配置类,该类中可以包含@Bean注解的方法。@Bean注解用于将一个方法返回的对象注册到Spring容器中。

下面是一个使用@Configuration和@Bean注解的示例:

代码语言:javascript
复制
@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}

        可以看到,使用@Configuration注解的类中包含@Bean注解的方法,该方法返回一个UserService对象。当Spring容器启动时,会自动将该对象注入到容器中,我们可以使用@Autowired注解从容器中获取该对象。

示例截图如下:

Spring Boot(05):从@Controller到@Scheduled,Spring Boot注解全家桶等你来探索!_spring boot_02
Spring Boot(05):从@Controller到@Scheduled,Spring Boot注解全家桶等你来探索!_spring boot_02

3.6 @Value和@PropertySource注解

        @Value注解用于从配置文件中获取指定的属性值,并将其绑定到方法的参数上。而@PropertySource注解用于指定要读取的配置文件。

下面是一个使用@Value和@PropertySource注解的示例:

代码语言:javascript
复制
@Configuration
@PropertySource("classpath:config.properties")
public class AppConfig {

    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    @Bean
    public AppInfo appInfo() {
        return new AppInfo(appName, appVersion);
    }
}

        可以看到,使用@Value注解的方法参数会自动从配置文件中获取指定的属性值。而使用@PropertySource注解的类会指定要读取的配置文件。当Spring容器启动时,会自动将配置文件中的属性值注入到该类中。

3.7 @Profile注解

@Profile注解用于指定一个Bean在哪些环境下才会被注册到Spring容器中。

下面是一个使用@Profile注解的示例:

代码语言:javascript
复制
@Configuration
public class AppConfig {

    @Bean
    @Profile("dev")
    public DataSource dataSourceForDev() {
        return new DevDataSource();
    }

    @Bean
    @Profile("prod")
    public DataSource dataSourceForProd() {
        return new ProdDataSource();
    }
}

      可以看到,使用@Profile注解的方法只会在指定的环境下才会被注册到Spring容器中。在上面的例子中,当Spring Boot应用程序在dev环境下启动时,会注入DevDataSource对象;当Spring Boot应用程序在prod环境下启动时,会注入ProdDataSource对象。

3.8 @EnableAutoConfiguration注解

        @EnableAutoConfiguration注解可以帮助我们自动配置Spring Boot应用程序中的Bean,从而让开发者可以专注于业务逻辑的实现。

下面是一个使用@EnableAutoConfiguration注解的示例:

代码语言:javascript
复制
@SpringBootApplication
public class MyApp {

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

        可以看到,使用@SpringBootApplication注解的程序类中包含了@EnableAutoConfiguration注解。当启动应用程序时,Spring Boot会自动扫描该类所在的包以及其子包,并将所有标记有@Bean注解的方法注册到Spring容器中。

3.9 @Conditional注解

        @Conditional注解可以指定一个条件,当该条件满足时,才会将Bean注册到Spring容器中。

下面是一个使用@Conditional注解的示例:

代码语言:javascript
复制
@Configuration
public class AppConfig {

    @Bean
    @Conditional(MyCondition.class)
    public MyBean myBean() {
        return new MyBean();
    }
}

        可以看到,使用@Conditional注解的方法只会在指定的条件下才会被注册到Spring容器中。在上面的例子中,只有MyCondition类中的matches方法返回true时,才会将MyBean对象注册到Spring容器中。

测试用例

        本文所介绍的注解都是Spring Boot中常用的注解,使用起来非常简单。我们可以根据注解的类型和作用来编写相应。此处就不一一演示介绍了。

小结

        本文所介绍的注解都是Spring Boot中常用的注解,使用起来非常简单。主要的思路是将一个POJO类标记为Spring MVC的Controller,并使用注解来映射HTTP请求到Controller的处理方法。 

关于我

👨🎓作者:bug菌 ✏️博客:CSDN、掘金、infoQ、51CTO等 🎉简介:CSDN|阿里云|华为云|51CTO等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金 | InfoQ | 51CTO等社区优质创作者,全网粉丝合计15w+

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 摘要
  • 3. 常用注解
    • 3.1 @Controller和@RestController注解
      • 3.2 @RequestMapping、@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解
        • 3.3 @RequestBody和@ResponseBody注解
          • 3.4 @RequestParam和@PathVariable注解
            • 3.5 @Configuration和@Bean注解
              • 3.6 @Value和@PropertySource注解
                • 3.7 @Profile注解
                  • 3.8 @EnableAutoConfiguration注解
                    • 3.9 @Conditional注解
                    • 测试用例
                    • 小结
                    • 关于我
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档