Spring常用注解一网打进

本文主要总结了Spring中常用、常见的注解,针对每一个注释都阐述了具体的用法,希望对你有所帮助

@SpringBootApplication

这个注解算是Spring Boot项目的基石,所以单独拎出来说一下,其在创建SpringBoot项目以后会默认在主类上加上。

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

其可以看做@Configuration、@EnableAutoConfiguration、@ComponentScan注解的集合,其这三个注解的作用分别如下所示

  • @EnableAutoConfiguration:启动SpringBoot的自动装配机制
  • @ComponentScan:扫描被@Component(@Service、@Controller)注解的bean,注解默认会扫描该类所在包下所有的类
  • @Configuration:运行在Spring上下文中注册额外的bean或导入其他配置类

Spring Bean 相关

@Autowired

自动导入对象到类中,被注入进的类ton光要被Spring管理,比如Service类注入到Controller类中

@Service
public class TestService{
    ......
}

@RestController
@RequestMapping("/users")
public class TestController{
    @Autowired
    private TestService testService;
}
@Qualifier

当有多个同一类型的Bean时,可以使用@Qualifier(“name”)来指定。与@Autowired配合使用。其是根据名称进行注入,而@Autowired根据类型注入。

@Component,@Repository,@Service,@Controller

我们一般使用@Autowired注解让Spring容器帮我们自动装配bean 。要想把类标识成可用于@Autowired注解自动装配的bean类,可以采用以下注解实现

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

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中,是REST风格的控制器

单独使用@Controller不加@ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC的应用,对应前后端不分离的情况。@Controller+@ResponseBody返回JSON或XML形式数据

@Scope

声明Spring Bean的作用域

@Bean
@Scope("singleton")
public Person personSingleton(){
    return new Person();
}

常见的Bean的作用域

  • singleton:单例,唯一Bean实例
  • prototype:每次请求都会创建一个新的bean实例
  • request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效
  • session:每一次HTTP请求都会产生一个新的Bean,该bean仅在当前HTTP session内有效
@Configuration

一般用来声明配置类,可以使用@Component注解代替,不过使用@Configuration注解声明配置类更加语义化

@Configuration
public class AppConfig{
    @Bean
    public TransferService transferService(){
        return new TransferServiceImpl();
    }
}

处理常见的HTTP请求类型

五种常见的请求类型

  • GET:请求从服务器获取特定资源
  • POST:在服务器上创建一个新的资源
  • PUT:更新服务器上的资源(客户端提供更新后的整个资源)
  • DELETE:从服务器上删除特定的资源
  • PATCH:更新服务器上的资源(客户端提供更改的属性,可以看做是部分更新)
GET请求

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

POST请求

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

PUT请求

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

DELETE请求

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

PATCH请求

一般实际项目中,都是PUT不够用了采用PATCH请求去更新数据

前后端传值

@pathVariable和@RequestParam

@PathVariable用于获取路径参数

@RequestParam用户获取查询参数

@GetMapping("/user/{userId}/age")
public String getUserIdAge(
    @PathVariable("userId") String useid,
    @RequestParam(value="type",required = false) String type){
    
}

如果我们请求的url是:/user/{123456}/age?type=web

那么我们服务器端得到的数据就是:userid=123456;type=web

@RequestBody

用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter或者自定义的HttpMessageConverter将请求的 body 中的 json 字符串转换为 java 对象。

读取配置信息

有些时候我们需要将一些常用的配置信息放到配置文件中,在具体使用的过程中我们需要从配置文件中读取这些数据。其中Spring就给我们提供了几种不错的读取配置信息的方法

例如常见的yml文件

zhonghu:关注java冢狐。
my-profile:
    name:java冢狐
  age:18
  
 user:
    location:中国
  books:
    -name:三国演义
     description:魏蜀吴
    -name:西游记
     description:师徒四人
     
  
@value

使用@value("${property}")读取比较简单的配置信息

@Value("${zhonghu}")
String zhonghu;
@ConfigurationProperties

通过@ConfigurationProperties读取配置信息并与bean绑定

@Component
@ConfigurationProperties(prefix ="user")
class User{

}

可以像使用普通的Spring Bean一样,将其注入到类中使用。

@PropertySource

主要用于读取指定的properties文件

参数校验

参数校验在我们编程中的重要性不言而喻,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一次校验,避免用户饶过浏览器直接通过HTTP工具直接向后端请求一些违法数据。

JSR是一套JavaBean参数校验的标准,其定义了很多常用的校验注解。

一些常用的字段验证的注解
  • @NotEmpty 被注释的字符串的不能为 null 也不能为空
  • @NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符
  • @Null 被注释的元素必须为 null
  • @NotNull 被注释的元素必须不为 null
  • @AssertTrue 被注释的元素必须为 true
  • @AssertFalse 被注释的元素必须为 false
  • @Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式
  • @Email 被注释的元素必须是 Email 格式。
  • @Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @Size(max=, min=)被注释的元素的大小必须在指定的范围内
  • @Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
  • @Past被注释的元素必须是一个过去的日期
  • @Future 被注释的元素必须是一个将来的日期

JPA相关

创建表

@Entity:声明一个类对应一个数据库实力

@Table:设置表名

创建主键

@Id:声明一个字段为主键

使用@Id声明以后,我们还可以定义主键的生成策略,使用@GenerateValue指定主键生成策略

设置字段类型

@Column:声明字段

// 设置属性userName对应的数据库字段名为user_name,长度为32,非空
@Column(name = "user_name",nullable = false,length=32)
private String userName;
// 设置字段类型并且加默认值
@Column(columnDefinition = "tinyint(1) default 1")
private Boolean enabled;
指定不持久化特定字段

@Transient:声明不需要与数据库映射的字段,在保存的时候不需要保存进数据库。

声明大字段

@Lob:声明某个字段为大字段

关联关系
  • @OneToOne 声明一对一关系
  • @OneToMany 声明一对多关系
  • @ManyToOne声明多对一关系
  • @MangToMang声明多对多关系

全局异常处理

  • @ControllerAdvice:包含@Component。可以被扫描到。统一处理异常。
  • @ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行以下方法。

最后

  • 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
  • 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
  • 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。

——我是冢狐,和你一样热爱编程。

image

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值