Spring Boot中的常用注解

简介: Spring Boot中的常用注解

@EqualsAndHashCode(callSuper = true)


避免子类在进行类型判断是出现错误。

具体参考https://www.jianshu.com/p/16571aad10a2


@JsonProperty(“”)


@JsonProperty注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名

序列化和反序列化

序列化:把Java对象转换为字节序列的过程。

反序列化:把字节序列恢复为Java对象的过程。

对象的序列化主要有两种用途:

把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象)

在网络上传送对象的字节序列。(网络传输对象)

Spring Boot 内置了jackson来完成JSON的序列化和反序列化操作。Jackson使用ObjectMapper类将POJO对象序列化成JSON字符串,也能将JSON字符串反序列化成POJO对象。

Jackson包含了很多注解,用来个性化序列化和反序列化操作,主要有如下注解


@JsonProperty,作用在属性上,用来为JSON Key指定一个别名。


@JsonIgnore,作用在属性上,用来忽略此属性。在json序列化时将对象中的一些属性忽略掉,标记在属性或者方法上,返回的json数据不包含该属性。


@JsonIgnoreProperties,忽略一组属性,作用于类上

@JsonFormat,用于日期格式化。


@JsonSerialize,指定一个实现类来自定义序列化。类必须实现JsonSerializer接口。


@Valid注解


@Valid 注解,表示我们对这个对象属性需要进行验证,

在实体类上


既然验证,那么就肯定会有验证结果,所以我们需要用一个东西来存放验证结果,做法也很简单,在参数直接添加一个BindingResult,具体如下


对应获取验证结果的代码如下:

@Value注解


@Value将外部配置文件的值动态注入到Bean中。配置文件主要有两类:

application.properties。application.properties在spring boot启动时默认加载此文件

将配置文件中的值注入进去



@Accessors(chain = true)


这个注解是来至于lombok里面的 只需要在实体类加上就可以开启链式编程了


@RequiredArgsConstructor


在我们写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@AutoWired注解,代码看起来很乱 lombok提供了一个注解:@RequiredArgsConstructor就不用写@AutoWired注解的方式


@Mapper注解


扫描项目中的Dao层,将dao接口类注入到Spring,能够让其他类进行引用;


@MapperScan


扫描项目中的Dao层,将dao接口类注入到Spring,能够让其他类进行引用;

可以指定要扫描的dao接口类的路径,可以在启动类中添加此注解,可替代@Mapper注解(此模块内dao接口类不用都添加@Mapper注解)


@MapperScan("com.demo.mapper"):扫描指定包中的接

@EnableCaching


开启基于注解的缓存

是spring framework中的注解驱动的缓存管理功能。

结合相应的注解后,会实现只查询了一次数据库,缓存效果达到。


@PathVariable(路径参数)


这个其实是springMvc中的注解

用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。

如下所示:


@GetMapping("/user/{userId}")
    public User selectUserByUserId(@PathVariable("userId") Integer userId){
        User user = userService.selectUserByUserId(userId);
        return user;
  }
• 1
• 2
• 3
• 4
• 5

@ConfigurationProperties注解


只要在bean上添加上这个注解,指定好配置文件的前缀,那么对应的配置文件数据就会自动填充到bean中。举个栗子,现在有如下配置:

配置文件myconfig

myconfig.name=test
myconfig.age=22
myconfig.desc=这是我的测试描述

添加对应的配置类,并添加上注解@ConfigurationProperties,指定前缀为myconfig


@Component
@ConfigurationProperties(prefix = "myconfig")
public class MyConfig {
private String name;
private Integer age;
private String desc;
  //get/set 略
  @Override
public String toString() {
  return "MyConfig [name=" + name + ", age=" + age + ", desc=" + desc + "]";
}
}

测试

public static void main(String[] args) throws Exception {
  SpringApplication springApplication = new SpringApplication(Application.class);
  // 非web环境
  springApplication.setWebEnvironment(false);
  ConfigurableApplicationContext application = springApplication.run(args);
  MyConfig config = application.getBean(MyConfig.class);
  log.info(config.toString());
  application.close();
}

可以看到输出log

com.cml.chat.lesson.lesson3.Application - MyConfig [name=test, age=22, desc=这是我的测试描述]

@Bean注解


@Bean表示方法产生一个由Spring管理的bean,属性的名称语义与Spring XML中的 标签配置的一样。

使用例子 作用在方法上


public class DataSource {
    private String url;
    private String userId;
    private String password;
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "DataSource{" +
                "url='" + url + '\'' +
                ", userId='" + userId + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
@Configuration
public class DataBaseConfig {
    @Bean("dataSource")
    public DataSource getDataSource(){
        DataSource dataSource = new DataSource();
        dataSource.setUserId("jingsi");
        dataSource.setPassword("123456");
        dataSource.setUrl("www");
        return dataSource;
    }
}

@Component注解


@Component这个注解说把这个类交给Spring管理

在持久层、业务层和控制层中,分别采用@Repository、@Service和@Controller


@ResponseBody注解


@ResponseBody并不是以json返回。不加@ResponseBody,是将方法返回的值作为视图名称,并自动匹配视图去显示,而加上@ResponseBody就仅仅是将方法返回值当作内容直接返回到客户端,并且会自适应响应头的content-type,返回的字符串符合json,那么content-type就是application/json,如果是普通字符串,就是text/plain,但是加上注解属性produces=application/json,那么不管内容是什么格式,响应头的content-type就一直是application/json,不再去做自适应,至于内容是不是json都不重要了


@RequestParam(查询参数)


适应于key-value类型

作用:

把请求中指定名称的参数给控制器中的形参赋值。

属性:

value: 请求参数中的名称。

required:请求参数中是否必须提供此参数。 默认值: true。表示必须提供,如果不提供将报错

public String useRequestParam(@RequestParam("name")String username,
  @RequestParam(value="age",required=false)Integer age){
    System.out.println(username+","+age);
  return "success";
}

@RequestBody


这个适应于对象,json,list等类型

postman测试结果

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用**@RequestBody接收数据时,一般都用POST方式进行提交**。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、

数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收

参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value

里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。

即:如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到;

如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或

则形参前 什么也不写也能接收

参考:@RequestBody的使用


@Data注解


不用再手动添加get/set等方法了,大大提高了写代码的速度。

1、在idea中直接在plugins下载lombok

2、重启编辑器

3、在pom.xml添加maven依赖


<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
 </dependency>

@ControllerAdvice


是@Controller注解的一个增强,这个注解是Spring里面的东西,可以处理全局异常。当然在Spring Boot中也可以使用,但是Spring Boot中有它全自动化配置的异常处理,因为是全自动化的,因此也可以自己定制,比如定制它的异常页面,异常信息提示,异常视图。这里的话主要看一下,这个注解怎么用。它主要有一下几个功能:

处理全局异常

预设全局数据

请求参数预处理


@Async


在启动类上加上@EnableAsync注解,即可使得@Async注解生效。


@Transactional


声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

简而言之,@Transactional注解在代码执行出错的时候能够进行事务的回滚。

相关文章
|
7天前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
25 0
|
25天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
14天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
40 4
SpringBoot必须掌握的常用注解!
|
16天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
56 2
|
16天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
32 1
|
30天前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
10天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
1月前
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解
|
23天前
|
存储 Java 数据管理
强大!用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能
本文深入介绍了如何在Spring Boot应用中使用`@Audited`注解和`spring-data-envers`实现数据审计功能,涵盖从添加依赖、配置实体类到查询审计数据的具体步骤,助力开发人员构建更加透明、合规的应用系统。
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
46 0