SpringBoot+Spring+SpringMVC常用注解!

目录

1.@SpringBootApplication

2. @Autowired

3. @Resource

4. @Component,@Repository,@Service,@Controller

5. @RestController

6. @Scope

7. @Configuration

8. 5种常见的请求类型

9. GET请求

10. POST请求

11. PUT请求

12. DELETE请求

13. @PathVariable和@RequestParam

14. @RequestBody

15. Value(常用)

16. @ConfigurationProperties

17. 字段验证的注解

18. Controller异常注解

19. 创建数据库中的表

20. @Id

21. @Column

22. @Transactional

23. @JsonFormat

24. 缓存

25. @CrossOrigin

26. @ComponentScan


1.@SpringBootApplication

这个注解是SpringBoot的基石,创建SpringBoot项目默认在主类上加。可以把@SpringBootApplication看作@Configuration + @EnableAutoConfiguration + @ComponentScan

这三个注解的作用分别是:

  • @Configuration:允许spring上下文中注册额外的bean或导入其他配置类。
  • @EnableAutoConfiguration:启动SpringBoot自动装配。
  • @ComponentScan:扫描被@Component(@Repository,@Servie,@Controller)注解的bean,注解默认会扫描该类所在包下所有类。

2. @Autowired

自动导入对象到类中,被注入进的类同样要被Spring容器管理,如:Service类注入到Controller类

默认按类型装配,如果我们想用名称装配,可以结合@Qualifier注解使用。

  • @Autowired可以作用在变量,setter方法,构造函数上。

3. @Resource

与@Autowired类似 都是注入bean的注解,但@Autowire默认按照类型匹配,如果需要按照名称匹配需要与@Qualifier一起使用,@Resource默认按照名称匹配,名称匹配不到再根据类型匹配。

4. @Component,@Repository,@Service,@Controller

我们一般使用@Autowired注解让Spring容器帮我们自动装配bean,想把类表示成可用于@Autowired注解自动装配的bean类,可以使用以下注解:

  • @Component:通用的注解,可以标注任意类为Spring组件。如果bean不知道属于哪一层可以使用这个注解。
  • @Repository:对应持久层即Dao层,主要用于数据库相关操作。
  • @Service:对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层。
  • @Controller:对应SpringMVC控制层,主要用于接受用户请求并调用Service层返回数据给前端页面

5. @RestController

@RestController是@Controller和@ResponseBody合集,用户标记控制器类,一般用于实现RESTful API接口服务,与传统的控制器不同,使用@RestController注解的控制器会将响应体直接返回给客户端。它可以方便地处理数据返回和异常处理等功能,同时也可以充分发挥SpringBoot优势,简化开发,提高效率。

以下是使用场景:

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 根据用户 ID 获取用户信息
     * @param id 用户 ID
     * @return 用户信息
     */
    @GetMapping("/user/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.getUserById(id);
        if (user == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(user);
    }
}

6. @Scope

声明SpringBean的作用域,在Spring容器中bean的作用域决定了bean实例的生命周期和可见范围,而@Scope就是来指定这些作用域:

  • Singleton(单例):容器中只有一个实例,每次获取时都返回同一个对象。
  • Prototype(原型):每次获取时都会创建一个新的实例。
  • Requtest(请求):每个HTTP请求对应一个bean实例,在同一个请求中多次获取则返回同一个实例。
  • Session(会话):每个用户会话对应一个bean实例,同一个用户会话中多次获取则返回同一个实例。
  • GlobalSession(全局会话):只在基于Portlet架构的Web应用使用,表示整个Portlet应用只有一个实例。

以下是使用方式:

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class PrototypeBean {
    // ...
}

7. @Configuration

一般用来声明配置类,通过@Configuration标记的配置类会被SpringIOC容器扫描,并将其中的bean定义加入到容器中,供其他bean调用

8. 5种常见的请求类型

  • GET:请求从服务器获取资源。GET /users(获取所有学生)
  • POST:服务器创建一个新资源。POST /addUser(添加学生)
  • PUT:更新服务器资源。PUT /updateById/12
  • DELETE:从服务器删除特定资源。DELETE /delUserById/15
  • PATCH:更新服务器资源。(使用很少)

9. GET请求

@GetMapping("users")等价于@RequestMapping(value="/users",method=RequestMethod.GET)

10. POST请求

@PostMapping("addUser")等价于@RequestMapping(value="/addUser",method=RequestMethod.POST)

11. PUT请求

@PutMapping("/updateById/{userId}")等价于@RequestMapping(value="/updateById/{userId}",method=RequestMethod.PUT)

12. DELETE请求

@DeleteMapping("/delUserById/{userId}")等价于@RequestMapping(value="/delUserById/{userId}",method=RequestMethod.DELETE)

13. @PathVariable和@RequestParam

@PathVariable用于获取路径占位符的变量,常用于RESTful接口中

@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
    // ...
}

@RequestParam用于获取请求参数值,可以指定默认值,是否必填等

@GetMapping("/users")
public List<User> getUserList(@RequestParam(required = false, defaultValue = "1") Integer pageNo,
                              @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
    // ...
}

14. @RequestBody

@RequestBody用于获取HTTP请求体中的参数值,通常POST,PUT,PATCH请求使用。也提供了对各种数据的支持,包括JSON,XML,文本等格式数据。

@PostMapping("/users")
public User createUser(@RequestBody User user) {
    // ...
}

 注意:一个请求方法只可以有一个@RequestBody,可以有多个@RequestParam和@PathVariable。

15. Value(常用)

使用@Value读取yml配置文件内容

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

16. @ConfigurationProperties

用于将配置文件中的属性注入到Javabean,通过这个注解可以把一组相关的属性统一配置到一个对象,并进行使用。

@ConfigurationProperties(prefix = "app")
@Component
public class AppConfig {

    private String name;
    private String version;

    // Getter and setter methods...

}

17. 字段验证的注解

@NotEmpty:被注释的字符串不能为null和空

@NotBlank:被注释的字符串非null,且必须包含一个非空字符

@Null:被注释的元素必须为null

@NotNull:被注释的元素不为null

@AssertTrue:被注释的元素为true

@AssertFalse:被注释的元素必须为false

@Email:被注释的元素为Email格式

@Min(value):被注释的元素必须是数字,值必须大于等于value

@Max(value):被注释的元素必须是数字,值必须小于等于value

@Size(max=v1,min=v2):被注释的元素值在指定范围内

......

18. Controller异常注解

  • @ControllerAdvice:注解定义全局异常处理类
  • @ExceptionHandler:注解声明异常处理方法
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    /**
     * 请求参数异常处理
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {
       ......
    }
}

19. 创建数据库中的表

  • @Entity:声明一个类对应数据库的一个实体
  • @Table:设置表明
@Entity
@Table(name = "role")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String description;
    省略getter/setter......
}

20. @Id

使用@Id声明之后,我们还需要定义主键的生成策略。我们可以使用 @GeneratedValue 指定主键生成策略

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

21. @Column

@Column:声明字段

设置属性userName对应的数据库字段名为user_name,长度为32,非空

@Column(name = "user_name", nullable = false, length=32)
private String userName;

22. @Transactional

在要开启事务的方法使用@Transactional注解

@Transactional(rollbackFor = Exception.class)
public void save() {
  ......
}

23. @JsonFormat

一般用来格式化json数据

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone="GMT")
private Date date;

24. 缓存

  • @EnableCaching:开启缓存配置
  • @CacheConfig:提供公共缓存配置
  • @Cacheable:在方法或类上,缓存方法或类的返回值
  • @CachePut:先执行方法,再将结果缓存
  • @CacheEvict:删除缓存
  • @Caching:可以配置@Cacheable,@CachePut,@CacheEvict

25. @CrossOrigin

@CrossOrigin 是 Spring 框架中用于处理跨域请求的注解。当客户端(浏览器)发起一个跨域请求时,服务端需要允许跨域访问,否则会因为同源策略而拒绝请求,这时就可以通过使用 @CrossOrigin 注解来设置响应头,允许请求进行跨域访问。

@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/hello")
    @CrossOrigin(origins = "http://localhost:8080")
    public String hello() {
        return "Hello World!";
    }
}

26. @ComponentScan

@ComponentScan用于自动扫描并加载组件的注解,用于指定被扫描的包或路径,将其中带有@Component以及派生注解的组件(@Controller,@Service,@Repository等)自动加载到容器。

@Configuration
@ComponentScan(basePackages = {"com.mycompany"})
public class AppConfig {

    // 配置其他 Bean...

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月月崽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值