Spring Boot –注释
Spring Boot 注释是一种元数据形式,可提供有关 Spring 应用程序的数据。Spring Boot建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员的最爱。Spring Boot 是一个基于微服务的框架,在其中创建生产就绪的应用程序只需很少的时间。以下是 Spring Boot 的一些功能:
- 它可以避免 Spring 中繁重的 XML 配置
- 它可以轻松维护和创建 REST 端点
- 它包括嵌入式 Tomcat 服务器
- 部署非常容易,war和jar文件可以轻松部署在Tomcat服务器中
Spring Boot 注解
Spring 注释存在于org.springframework.boot.autoconfigure和org.springframework.boot.autoconfigure.condition包中,通常称为 Spring Boot 注释。
Spring Boot 注解列表
此类别中可用的一些注释包括:
- 注释:
- 注释:
- @EnableAutoConfiguration
- @ComponentScan
- 自动配置条件
- @ConditionalOnClass 和 @ConditionalOnMissingClass
- @ConditionalOnBean 和 @ConditionalOnMissingBean
- @ConditionalOnProperty
- @ConditionalOnResource
- @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
- @ConditionalExpression
- @Conditional
1. @SpringBootApplication 注解
此注解用于标记 Spring Boot 应用程序的主类。它封装了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解及其默认属性。
例子:
Java
@SpringBootApplication
// Class
public class DemoApplication {
// Main driver method
public static void main(String[] args)
{
SpringApplication.run(DemoApplication.class, args);
}
}
2. @SpringBootConfiguration 注解
它是 Spring Boot 框架的一部分,属于类级注释。它表示类提供 Spring Boot 应用程序配置。它可以用作 Spring 标准@Configuration注释的替代方案,以便可以自动找到配置。大多数 Spring Boot 应用程序通过 @SpringBootApplication 使用 @SpringBootConfiguration。如果应用程序使用 @SpringBootApplication,则它已经在使用 @SpringBootConfiguration。
例子:
Java
@SpringBootConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public StudentService studentService() {
return new StudentServiceImpl();
}
}
3. @EnableAutoConfiguration 注解
此注释自动配置类路径中存在的 bean。它通过从类路径中假设所需的 bean 并将其配置为运行应用程序,简化了开发人员的工作。此注释是 Spring Boot 框架的一部分。例如,当我们在类路径中说明spring-boot-starter-web依赖项时,Spring Boot 会自动配置Tomcat和Spring MVC。声明 @EnableAutoConfiguration 注释的类的包被视为默认包。因此,我们需要在根包中应用 @EnableAutoConfiguration 注释,以便可以检查每个子包和类。
例子:
Java
@Configuration
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4. @ComponentScan 注解
@ComponentScan 告诉 Spring 在哪些包中注释了应该由 Spring 管理的类。因此,例如,如果您有一个用@Controller注释的类,而该类位于 Spring 未扫描的包中,则您将无法将其用作 Spring 控制器。因此,我们可以说 @ComponentScan 使 Spring 能够扫描配置、控制器、服务和其他定义的组件。通常,@ComponentScan 注释与 @Configuration 注释一起使用,以指定 Spring 扫描组件的包。
例子:
Java
@Configuration
@ComponentScan
// Main class
public class Application {
// Main driver method
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
5. @ConditionalOnClass 注释和 @ConditionalOnMissingClass 注释
@ConditionalOnClass 注释用于标记自动配置 bean 是否在注释参数中的类存在/不存在。
例子:
Java
@Configuration
@ConditionalOnClass(MongoDBService.class)
class MongoDBConfiguration {
// Insert code here
}
6. @ConditionalOnBean 注释和 @ConditionalOnMissingBean 注释
这些注释用于根据特定 bean 的存在或不存在来包含 bean。
例子:
Java
@Bean
@ConditionalOnMissingBean(type = "JpaTransactionManager")
JpaTransactionManager jpaTransactionManager(
EntityManagerFactory entityManagerFactory)
{
// Insert code here
}
7. @ConditionalOnProperty 注释
这些注释用于根据 Spring 环境属性的存在和值来包含配置。
例子:
Java
@Bean
@ConditionalOnProperty(name = "usemongodb",
havingValue = "local")
DataSource
dataSource()
{
// Insert code here
}
@Bean
@ConditionalOnProperty(name = "usemongodb",
havingValue = "prod")
DataSource
dataSource()
{
// Insert code here
}
8. @ConditionalOnResource 注释
这些注释用于仅当类路径中存在特定资源时才包含配置。
例子:
Java
@ConditionalOnResource(resources = "classpath:mongodb.properties")
Properties
additionalProperties()
{
// Insert code here
}
9. @ConditionalOnExpression 注释
这些注释用于根据SpEL(Spring 表达语言)表达式的结果包含配置。
SpEL(Spring Expression Language):它是一种强大的表达语言,支持在运行时查询和操作对象图。
例子:
Java
@Bean
@ConditionalOnExpression("${env} && ${havingValue == 'local'}")
DataSource dataSource()
{
// Insert code here
}
10. @ConditionalOnCloudPlatform 注释
这些注释用于让指定的云平台处于活动状态时包含配置。
例子:
Java
@Configuration
@ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY)
public class CloudConfigurationExample
{
// Insert code here
}
请求处理和控制器注释:
属于此类别的一些重要注释包括:
- @控制器
- @RestController
- @RequestMapping
- @RequestParam
- @PathVariable
- @RequestBody
- @ResponseBody
- @ModelAttribute
1. @Controller 注解
此注释提供Spring MVC功能。它用于创建 Controller 类,同时处理 HTTP 请求。通常,我们使用@Controller注释和@RequestMapping注释将 HTTP 请求与控制器类中的方法进行映射。
例子:
Java
//Create a Java class and use @Controller annotation to make it controller class
@Controller
public class MyController{
public String GFG(){
//insert code here
}
}
2. @RestController 注释
此注释用于处理 REST API,例如 GET、PUT、POST、DELETE 等,也用于使用 Spring MVC 创建 RESTful Web 服务。
它封装了@Controller注释和@ResponseBody注释及其默认属性。
@RestController = @Controller + @ResponseBody
例子:
Java
//Create a Java class and use @RestController annotation
// to make the class as a request handler
@RestController
public class HelloController{
public String GFG(){
//insert code here
}
}
3. @RequestMapping 注解
此注解用于将 HTTP 请求与控制器类内的处理程序方法映射。
例子:
Java
//Java program to demonstrate @RequestMapping annotation
@RestController
public class MyController{
@RequestMapping(value=" ",method=RequestMapping.GET)
public String GFG(){
//insert code here
}
}
为了处理特定的 HTTP 请求,我们可以使用
- @GetMapping
- @PutMapping
- @PostMapping
- @PatchMapping
- @DeleteMapping
注意:我们可以手动使用 GET、POST、PUT 和 DELETE 注释以及路径,也可以将 @RequestMapping 注释与方法结合使用,以处理上述所有处理程序请求
4. @RequestParam 注解
此注释主要用于从 URI 获取参数。换句话说,我们可以说@RequestParam注释用于读取表单数据并将 Web 请求参数绑定到特定的控制器方法。
例子:
Java
//Java code to demonstrate @RequestParam annotation
@RestController
public class MyController{
@GetMapping("/authors")
public String getAuthors(@RequestParam(name="authorName") String name){
//insert code here
}
}
5. @PathVariable 注释
此注解用于从 URI 路径中提取数据。它将 URL 模板路径变量与方法变量绑定。
例子:
//Java Program to Demonstrate @PathVariable annotation
@RestController
public class MyController{
@GetMapping("/author/{authorName}")
public String getAuthorName(@PathVariable(name = "authorName") String name){
//insert your code here
}
}
6. @RequestBody 注解
此注释用于将 HTTP 请求从传入的 JSON 格式转换为直接从请求主体开始的域对象。此处方法参数与 HTTP 请求主体绑定。
例子:
Java
// Java Code to Demonstrate @RequestBody annotation
@RestController
public class MyController{
@GetMapping("/author")
public void printAuthor(@RequestBody Author author){
//insert code here
}
}
7. @ResponseBody 注解
此注解用于将域对象转换为 JSON 或其他文本形式的 HTTP 请求。这里,方法的返回类型与 HTTP 响应主体绑定。
Java
//Java code to demonstrate @ResponseBody annotation
@Controller
public class MyController{
public @ResponseBody Author getAuthor(){
Author author = new Author();
author.setName("GFG");
author.setAge(20);
return author;
}
}
8. @ModelAttribute 注释
此注解引用 Spring MVC 中的模型对象。它也可以用于方法或方法参数。
例子:
@ModelAttribute("author") public Author author(){ //insert code here }
这里,我们不需要明确地将对象添加到模型中,因为对象将自动成为属性的一部分。