@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控制器场景。根据具体的需求和场景选择合适的注解进行使用。 通常情况下,HTTP请求的参数都是通过URL路径、查询参数或表单数据进行传递的。但是有时候我们需要将复杂的数据结构(比如JSON或XML格式的数据)作为请求体发送给服务端,这时就可以使用@RequestBody
注解来获取请求体中的数据。 在使用@RequestBody
注解时,可以将请求体中的数据直接绑定到方法参数上,Spring会将接收到的请求体数据转换为对应的Java对象或集合,并将其作为方法的参数传入。需要注意的是,请求体中的数据格式必须与目标对象的数据结构相匹配,否则会导致转换失败。
@PathVariable
是 Spring MVC 框架中的一个注解,用于将请求路径中的占位符参数绑定到方法的参数上。 在 Spring MVC 中,请求路径中的占位符参数可以通过 {}
来定义,例如 /users/{id}
。而 @PathVariable
注解可以将这些占位符参数绑定到方法的参数上,以便在方法中获取和使用这些参数。
用于controller类上方,用于启用参数校验功能
用于启用参数校验功能,用于参数对象,如果参数校验不通过会抛异常
@NotNull
用于检查参数是否为null。
@NotEmpty
用于检查字符串、集合或数组是否为空。
@NotBlank
用于检查字符串是否非空且长度大于0。
@Min
用于检查数值是否不小于指定值。
@Max
用于检查数值是否不大于指定值。
@Size
用于检查字符串、集合或数组的长度是否在指定范围内。
@Pattern
用于检查字符串是否匹配指定的正则表达式。
@Email
用于检查字符串是否为合法的电子邮件地址。
@Valid
用于递归地校验注解的参数,比如校验对象中的属性。
@AssertTrue
用于检查布尔值是否为true。
@AssertFalse
用于检查布尔值是否为false。
@DecimalMin
用于检查数值是否大于等于指定值。
@DecimalMax
用于检查数值是否小于等于指定值。
@Digits
用于检查数值是否满足整数部分和小数部分的位数要求。
@Future
用于检查日期是否是将来的日期。
@Past
用于检查日期是否是过去的日期。
正则表达式校验不含中文字符,其中message中用于抛异常
用于指定数据库表的主键生成策畨。@TableId
是 MyBatis-Plus 框架中的注解,type = IdType.AUTO
表示主键自增长,也就是数据库会自动为该字段生成唯一的递增值作为主键。
@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
是 Spring 框架中的一个注解,用于自动装配依赖项。 在使用 @Autowired
注解时,Spring 将会尝试寻找匹配的依赖项,并将其自动注入到标注了 @Autowired
的字段、构造函数或者方法中。这样可以避免手动实例化对象或者手动配置依赖项。用于引入字段,方法,函数等等。
@Repository
是 Spring 框架中的一个注解,用于标识持久层组件(DAO)。 作为三层架构中的一部分,持久层负责与数据库进行交互,执行数据库操作,包括增删改查等。@Repository
注解的作用就是将一个 Java 类标识为持久化层的组件,并且由 Spring 容器管理、依赖注入和事务控制。 使用 @Repository
注解的类通常包含了与数据库相关的数据访问逻辑,比如使用 JPA、Hibernate 等持久化框架进行数据持久化操作,或者直接使用 JDBC 进行数据访问。用于mapper接口
@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
是 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
是 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() {
// 定时任务逻辑
}
}
需要注意的是,为了使定时任务能够正常执行,必须确保以下条件:
@EnableScheduling
注解来启用定时任务功能。@Component
注解或其他方式将其作为一个 Bean 在 Spring 容器中进行管理。总结起来,@EnableScheduling
是一个用于启用 Spring 定时任务调度功能的注解。通过在配置类或应用主类上添加该注解,并在定时任务的方法上使用 @Scheduled
注解指定任务的执行时间和策略,可以实现定时任务的调度执行。
@EnableAsync
是 Spring 框架中的一个注解,用于启用异步方法的功能。 通过在配置类或应用主类上添加 @EnableAsync
注解,可以启用 Spring 的异步方法支持,使得方法可以以异步的方式在后台线程中执行。
在需要以异步方式执行的方法上添加 @Async
注解来指定该方法应该在后台线程中执行。
@Service
public class MyService {
@Async
public void asynchronousTask() {
// 异步方法逻辑
}
}
@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
是 Spring Boot 框架中的一个注解,用于启用配置属性(Configuration Properties)的绑定功能。 在 Spring Boot 应用中,我们可以通过 @ConfigurationProperties
注解来将配置文件中的属性值绑定到 Java 对象中,方便进行统一管理和使用。 使用 @EnableConfigurationProperties
注解可以将被 @ConfigurationProperties
注解标注的类自动注册为 Spring Bean,以便在应用中使用。