springboot中的一些重要的注解

@RestController@Controller的区别

返回值不同:

  • @RestController注解用于RESTful风格的控制器,它的方法默认返回JSON或XML格式的数据,不会进行视图渲染。通常用于构建Web服务API。
  • @Controller注解用于传统的MVC控制器,它的方法通常返回视图名称或模型对象,并由视图解析器进行视图渲染。

组合注解不同:

  • @RestController注解是@Controller@ResponseBody注解的组合,相当于类中的所有方法都被@ResponseBody修饰,直接将返回的对象作为响应体发送给客户端。
  • @Controller注解单独使用,需要在方法上添加@ResponseBody注解才能实现将返回的对象作为响应体发送给客户端。

使用场景不同:

  • @RestController适用于构建纯粹的Web服务API,返回的是数据对象,比如JSON、XML等。
  • @Controller适用于需要进行视图渲染的传统Web应用,返回的是视图名称或模型对象。
  • 总的来说,@RestController更适用于构建RESTful风格的Web服务API,而@Controller适用于传统的MVC控制器场景。根据具体的需求和场景选择合适的注解进行使用。

@RequestBody注解

        通常情况下,HTTP请求的参数都是通过URL路径、查询参数或表单数据进行传递的。但是有时候我们需要将复杂的数据结构(比如JSON或XML格式的数据)作为请求体发送给服务端,这时就可以使用@RequestBody注解来获取请求体中的数据。 在使用@RequestBody注解时,可以将请求体中的数据直接绑定到方法参数上,Spring会将接收到的请求体数据转换为对应的Java对象或集合,并将其作为方法的参数传入。需要注意的是,请求体中的数据格式必须与目标对象的数据结构相匹配,否则会导致转换失败。

@PathVariable

@PathVariable 是 Spring MVC 框架中的一个注解,用于将请求路径中的占位符参数绑定到方法的参数上。 在 Spring MVC 中,请求路径中的占位符参数可以通过 {} 来定义,例如 /users/{id}。而 @PathVariable 注解可以将这些占位符参数绑定到方法的参数上,以便在方法中获取和使用这些参数。

参数检验注解

@Validated

用于controller类上方,用于启用参数校验功能

@Valid

用于启用参数校验功能,用于参数对象,如果参数校验不通过会抛异常

@NotNull

用于检查参数是否为null。

@NotEmpty

用于检查字符串、集合或数组是否为空。

@NotBlank

用于检查字符串是否非空且长度大于0。

@Min

用于检查数值是否不小于指定值。

@Max

用于检查数值是否不大于指定值。

@Size

用于检查字符串、集合或数组的长度是否在指定范围内。

@Pattern

用于检查字符串是否匹配指定的正则表达式。

@Email

用于检查字符串是否为合法的电子邮件地址。

@Valid

用于递归地校验注解的参数,比如校验对象中的属性。

@AssertTrue

用于检查布尔值是否为true。

@AssertFalse

用于检查布尔值是否为false。

@DecimalMin

用于检查数值是否大于等于指定值。

@DecimalMax

用于检查数值是否小于等于指定值。

@Digits

用于检查数值是否满足整数部分和小数部分的位数要求。

@Future

用于检查日期是否是将来的日期。

@Past

用于检查日期是否是过去的日期。

@Pattern(regexp = "^[\\x00-\\x7F]+$", message = "字符串不能包含中文字符")

正则表达式校验不含中文字符,其中message中用于抛异常

@TableId(type = IdType.AUTO)

用于指定数据库表的主键生成策畨。@TableId 是 MyBatis-Plus 框架中的注解,type = IdType.AUTO 表示主键自增长,也就是数据库会自动为该字段生成唯一的递增值作为主键。

@CrossOrigin

@CrossOrigin是Spring框架中的一个注解,用于配置跨域资源共享(CORS)。 CORS是一种机制,允许服务器在响应中指定哪些源(域、协议或端口)可以访问资源。由于同源策略的限制,浏览器会阻止页面发起跨域请求,因此在某些情况下,服务器需要配置CORS以允许跨域访问。 使用@CrossOrigin注解,可以将其应用于控制器类或者控制器方法上,配置响应的CORS规则。常用的@CrossOrigin注解属性如下:

  • value:指定允许访问的来源。
  • allowedHeaders:指定允许的请求头。
  • allowedMethods:指定允许的HTTP方法。
  • exposedHeaders:指定允许暴露的响应头。
  • allowCredentials:指定是否允许发送身份验证信息(如cookie)。
  • maxAge:指定预检请求(OPTIONS)的缓存时间,单位为秒。 

示例

@CrossOrigin(origins = "http://123.com", allowedHeaders = "*", methods = {RequestMethod.GET, RequestMethod.POST})

表示允许来自http://123.com的请求访问该控制器,允许的请求头为任意值,允许的HTTP方法为GET和POST。

也可以不加属性,表示没有限制。

@Autowired

@Autowired 是 Spring 框架中的一个注解,用于自动装配依赖项。 在使用 @Autowired 注解时,Spring 将会尝试寻找匹配的依赖项,并将其自动注入到标注了 @Autowired 的字段、构造函数或者方法中。这样可以避免手动实例化对象或者手动配置依赖项。用于引入字段,方法,函数等等。

@Repository

@Repository 是 Spring 框架中的一个注解,用于标识持久层组件(DAO)。 作为三层架构中的一部分,持久层负责与数据库进行交互,执行数据库操作,包括增删改查等。@Repository 注解的作用就是将一个 Java 类标识为持久化层的组件,并且由 Spring 容器管理、依赖注入和事务控制。 使用 @Repository 注解的类通常包含了与数据库相关的数据访问逻辑,比如使用 JPA、Hibernate 等持久化框架进行数据持久化操作,或者直接使用 JDBC 进行数据访问。用于mapper接口

@Data

@Data 是一个由 Lombok 提供的注解,在 Java 类中使用它可以自动生成 Getter、Setter、equals()hashCode()toString() 等方法。它可以减少冗余的代码,提高开发效率。

配置中的注解

@Configuration

@Configuration 是 Spring 框架中的一个注解,用于表示一个类是配置类,可以替代传统的 XML 配置文件来定义 Spring Bean。 在 Spring 中,使用 @Configuration 注解的类被称为配置类,它可以包含用作 Spring Bean 定义的方法,并且这些方法通常使用 @Bean 注解。在配置类中,可以使用 @Bean 注解定义一个或多个 Spring Bean,Spring 容器会根据这些方法的返回值类型自动创建和管理相应的 Bean 实例。

配置类可以通过 @Import 注解导入其他配置类,从而实现配置的模块化和复用。 需要注意的是,配置类中的 @Bean 方法通常是非静态的,并且方法名就是 Bean 的名称,返回值类型就是 Bean 的类型。Spring 容器会根据这些方法进行实例化,并将其纳入 Spring 容器中进行管理。除了使用 @Bean 注解,还可以使用其他的注解来配置 Bean,如 @Component@Service@Repository 等。 使用配置类的主要优势是可以简化配置,不再需要使用繁琐的 XML 配置文件,通过 Java 代码来定义和组装 Bean。同时,配置类也提供了更强大的编程能力,可以在方法内部进行条件判断、循环等复杂的逻辑操作。

@Bean 

@Bean 是 Spring 框架中的一个注解,用于在配置类中定义一个方法,该方法将返回一个被 Spring 管理的 Bean 实例。 在 Spring 中,使用 @Bean 注解的方法通常出现在配置类中,它用于告诉 Spring 容器如何实例化、配置和管理特定的 Bean。

@Configuration
public class AppConfig {
    
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
    
}

myBean() 方法使用了 @Bean 注解,它告诉 Spring 容器要创建一个名为 "myBean" 的 Bean,并将 MyBean 的实例作为该 Bean。Spring 容器会根据配置类中的 @Bean 方法进行实例化,并将其纳入 Spring 容器进行管理。

@Bean(name = "myBean", initMethod = "init", destroyMethod = "destroy")
@Scope("prototype")
public MyBean myBean() {
    return new MyBean();
}

@Bean 注解的 name 属性指定了 Bean 的名称为 "myBean",initMethod 属性指定了在 Bean 实例化后需要调用的初始化方法,destroyMethod 属性指定了在 Bean 销毁前需要调用的销毁方法。同时,@Scope 注解指定了 Bean 的作用域为原型模式(每次请求都创建一个新的实例)。 需要注意的是,@Bean 方法通常是非静态的,并且方法名就是 Bean 的名称,返回值类型就是 Bean 的类型。返回的对象会自动被 Spring 容器管理,并可以在其他 Bean 或组件中注入使用。

@MapperScan 

@MapperScan 是 MyBatis 框架中的一个注解,用于自动扫描并注册 Mapper 接口的实现类。 在 MyBatis 中,使用 @Mapper 注解来标识一个 Mapper 接口,但是在大型项目中,可能存在大量的 Mapper 接口,手动一个一个地使用 @Mapper 注解进行注解会非常繁琐。此时就可以使用 @MapperScan 注解来简化配置。

@Configuration
@MapperScan("com.example.mapper") // 指定 Mapper 接口所在的包路径
public class MyBatisConfig {
    
    // MyBatis 相关配置
    
}

@Component

@Component 是 Spring 框架中的一个注解,用于声明一个普通的类作为组件,并由 Spring 容器进行管理。 在 Spring 中,使用 @Component 注解的类被视为一个普通的组件,它会被自动扫描并注册到 Spring 容器中,成为一个可被其他组件或类依赖注入的对象。

@ConfigurationProperties

@ConfigurationProperties 是 Spring Boot 框架中的一个注解,用于将外部配置文件中的属性值映射到一个 Java 类的属性上。 通过使用 @ConfigurationProperties 注解,可以方便地将配置文件中的属性值注入到 Spring Boot 应用中使用。

@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String property1;
    private int property2;
    // 省略getter和setter方法
}

@ConfigurationProperties 注解将 MyAppProperties 类标记为一个配置类,prefix 属性指定了配置文件中该类属性的前缀,即 myapp。 在配置文件(如 application.properties 或 application.yml)中,可以定义以 myapp 为前缀的属性值,它们将会被自动映射到 MyAppProperties 类中对应的属性上。

application.properties

myapp.property1=value1
myapp.property2=42

@RestController
public class MyController {
    private final MyAppProperties myAppProperties;
    public MyController(MyAppProperties myAppProperties) {
        this.myAppProperties = myAppProperties;
    }
    @GetMapping("/property1")
    public String getProperty1() {
        return myAppProperties.getProperty1();
    }
    @GetMapping("/property2")
    public int getProperty2() {
        return myAppProperties.getProperty2();
    }
}

MyController 类使用了 MyAppProperties 类,并通过构造函数的方式注入了 MyAppProperties 实例。然后在控制器中可以直接使用该实例来获取配置文件中的属性值。 需要注意的是,为了使用 @ConfigurationProperties 注解,必须将 MyAppProperties 类作为一个 Spring Bean 进行管理,通常通过 @Configuration 注解或其他方式将其引入到 Spring 的上下文中。 总结起来,@ConfigurationProperties 是一个用于将外部配置文件中的属性值映射到 Java 类的注解。它可以简化配置文件中属性值的读取,并将其注入到 Spring Boot 应用中的相应属性中,使得配置文件中的属性值能够在应用中方便地使用。

启动类中的注解

@EnableScheduling

@EnableScheduling 是 Spring 框架中的一个注解,用于启用定时任务调度的功能。 通过在配置类或应用主类上添加 @EnableScheduling 注解,可以启用 Spring 的定时任务功能,使得可以创建定时任务并按照指定的时间间隔或表达式进行调度执行。

@Configuration
@EnableScheduling
public class AppConfig {
    // 配置其他Bean或方法
}

在需要执行定时任务的方法上添加 @Scheduled 注解来指定任务的执行时间和执行策略。

@Component
public class MyScheduledTasks {
    @Scheduled(fixedRate = 5000) // 每隔5秒执行一次
    public void task1() {
        // 定时任务逻辑
    }
  
    @Scheduled(cron = "0 0 12 * * ?") // 每天中午12点执行
    public void task2() {
        // 定时任务逻辑
    }
}

需要注意的是,为了使定时任务能够正常执行,必须确保以下条件:

  1. 在配置类或应用主类中添加 @EnableScheduling 注解来启用定时任务功能。
  2. 定时任务的方法必须被 Spring 容器管理,可以使用 @Component 注解或其他方式将其作为一个 Bean 在 Spring 容器中进行管理。

总结起来,@EnableScheduling 是一个用于启用 Spring 定时任务调度功能的注解。通过在配置类或应用主类上添加该注解,并在定时任务的方法上使用 @Scheduled 注解指定任务的执行时间和策略,可以实现定时任务的调度执行。

@EnableAsync

@EnableAsync 是 Spring 框架中的一个注解,用于启用异步方法的功能。 通过在配置类或应用主类上添加 @EnableAsync 注解,可以启用 Spring 的异步方法支持,使得方法可以以异步的方式在后台线程中执行。

在需要以异步方式执行的方法上添加 @Async 注解来指定该方法应该在后台线程中执行。

@Service
public class MyService {
    @Async
    public void asynchronousTask() {
        // 异步方法逻辑
    }
}

@SpringBootApplication

@SpringBootApplication 是 Spring Boot 框架中的一个注解,用于标记一个主配置类,并启用自动配置和组件扫描功能。 在 Spring Boot 应用中,通常会创建一个主配置类,该类上需要添加 @SpringBootApplication 注解来指示该类是 Spring Boot 应用的入口点,并启用了一系列的功能和配置。

@SpringBootApplication 注解实际上是一个组合注解,它包含了以下三个注解的功能:

  • @Configuration:表明该类是一个配置类,可以在该类中定义 Spring Bean 的配置。
  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置功能,根据类路径下的依赖和配置信息,自动配置 Spring Bean 和其他相关功能。
  • @ComponentScan:启用组件扫描,自动扫描并注册标注有 @Component 注解(包括 @Controller@Service@Repository 等注解)的 Bean。 使用 @SpringBootApplication 注解可以大大简化 Spring Boot 应用的配置,并提供了自动配置和组件扫描的功能,使得开发者能够更专注于业务逻辑的实现。 总结起来,@SpringBootApplication 是一个包含 @Configuration@EnableAutoConfiguration@ComponentScan 功能的组合注解,用于标记 Spring Boot 应用的主配置类,启用自动配置和组件扫描。

@EnableConfigurationProperties

@EnableConfigurationProperties 是 Spring Boot 框架中的一个注解,用于启用配置属性(Configuration Properties)的绑定功能。 在 Spring Boot 应用中,我们可以通过 @ConfigurationProperties 注解来将配置文件中的属性值绑定到 Java 对象中,方便进行统一管理和使用。 使用 @EnableConfigurationProperties 注解可以将被 @ConfigurationProperties 注解标注的类自动注册为 Spring Bean,以便在应用中使用。

你可能感兴趣的:(spring,boot,java,后端)