java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot常用注解

Spring Boot快速入门、应用分析及常用注解示例详解

作者:程序猿零零漆

Spring Boot是一个基于Spring框架的开源Java框架,旨在简化Spring 应用程序的开发过程,本文介绍Spring Boot快速入门、应用分析、常用注解,感兴趣的朋友跟随小编一起看看吧

前言

本博客将带您快速入门 Spring Boot,我们将探讨其核心概念、常用注解以及实际应用中的一些分析。通过具体示例,您将能够了解如何高效地使用 Spring Boot 开发应用程序,并掌握一些常见的使用模式。

SpringBoot是什么

Spring Boot 是一个基于 Spring 框架的开源 Java 框架,旨在简化 Spring 应用程序的开发过程。它通过约定优于配置的方式,简化了 Spring 应用的设置和开发,使得创建独立的、生产级别的 Spring 应用变得更加快捷和方便。
大多数 Spring Boot 应用只需编写少量配置,即可快速整合 Spring 平台及第三方技术。其主要特性包括:

1.快速创建独立 Spring 应用:

2.内嵌 Servlet 容器:

3.场景启动器(Starter):

4.按需自动配置:

5.约定优于配置:

6.生产级特性:

7.无代码生成与无 XML 配置:

总结:Spring Boot 通过简化开发、配置、整合、部署、监控和运维的各个环节,帮助开发者快速构建和管理应用程序,提高工作效率。
SpringBoot官网

快速入门

创建maven项目

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.5.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

所有springboot项⽬都必须继承⾃ spring-boot-starter-parent
导⼊场景,场景启动器

<!--web开发的场景启动器-->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

SpringBoot的启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //这是⼀个SpringBoot应⽤
public class SpringbootTestOneApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootTestOneApplication.class, args);
    }
}

业务

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        System.out.println("hello World");
        return "Hello World";
    }
}

默认启动访问: localhost:8080
SpringBoot应⽤打包插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

mvn clean package 把项⽬打成可执⾏的jar包
java -jar demo.jar 启动项⽬

小结

场景启动器,默认⽀持的所有场景:https://docs.spring.io/spring-boot/redirect.html?page=using#using.build-systems.starters

application.properties :
集中式管理配置。只需要修改这个⽂件就行 。
配置基本都有默认值
能写的所有配置都在:https://docs.spring.io/spring-boot/appendix/application-properties/index.html#appendix.application-properties

应用分析

依赖管理机制

1.为什么导⼊ starter-web 所有相关依赖都导⼊进来?
起步依赖是一个方便的方式,允许开发者仅通过引入一个依赖项就能获得多个其他相关依赖。这种方法减少了手动管理每个单独依赖的复杂性。
当你添加 spring-boot-starter-web 这个依赖时,Spring Boot 会在其内部定义一组依赖关系,包括:

2.为什么版本号都不⽤写?
Spring Boot 提供了一个 BOM(Bill of Materials),它定义了不同库和组件的版本。这使得你只需引入起步依赖(Starter Dependencies),如 spring-boot-starter-web,就能自动获得与该版本的 Spring Boot 兼容的所有依赖项及其版本。
一旦需要更新 Spring Boot 版本,只需修改一个地方(即 Spring Boot 的版本号),所有相关依赖的版本会自动更新到适用于新版本的最新兼容版本。这种方式方便了项目的维护和升级。
3.自定义版本号
可以利用 Maven 的就近原则,在当前项目的 < properties> 标签中定义父项目版本的属性键,从而在导入依赖时直接指定版本号。这种做法提升了配置的清晰度,使得项目的版本管理更加灵活和便于维护。
4、第三⽅的jar包
boot⽗项⽬没有管理的需要自行声明好

<dependency>
	 <groupId>com.alibaba</groupId>
	 <artifactId>druid</artifactId>
	 <version>1.2.16</version>
</dependency>

⾃动配置机制

⾃动配置的 Tomcat、SpringMVC 等

通过导入特定场景的起步依赖,Spring Boot 会自动为相关功能配置所需的核心组件,如 Tomcat 和 Spring MVC。这意味着开发者无需手动配置组件,例如 DispatcherServlet、ViewResolver 和 CharacterEncodingFilter,这些都已默认配置完成。

默认的包扫描规则

在 Spring Boot 中,默认的包扫描规则是以 @SpringBootApplication 注解标注的类为主程序类。Spring Boot 仅会扫描该类所在的包及其子包,以实现自动的组件扫描功能。

如果需要自定义扫描路径,可以使用如下方式:

@SpringBootApplication(scanBasePackages = "com.itheima")
@ComponentScan("com.itheima") //可以直接指定要扫描的包路径。

配置默认值

配置文件中的所有配置项会与某个类的属性进行一一绑定,这些类被称为属性类。例如:

按需加载自动配置

当导入 spring-boot-starter-web 这个场景启动器时,它不仅会引入与该场景相关的功能依赖,还会引入一个核心基础的 starter,即 spring-boot-starter。这个基础 starter 是所有其他 starter 的核心组件。

spring-boot-starter 会引入一个名为 spring-boot-autoconfigure 的包,该包中包含了多种场景的自动配置类。这些自动配置类负责根据应用的需求自动配置所需的组件和功能。

尽管 spring-boot-autoconfigure 包中包含了所有场景的自动配置,但并非所有的自动配置都会被默认启用。只有在导入特定的场景依赖时,相关的自动配置才会被激活,这样可以实现按需加载,确保应用只启用所需的功能,提升灵活性和性能。

总结:导入场景启动器后,会触发 spring-boot-autoconfigure 包中的自动配置生效,从而使得容器中具备相关场景的功能。通过这种方式,Spring Boot 可以根据所导入的场景自动配置必要的组件和服务,简化了配置过程并提升了应用的功能性。

常用注解

组件注册

  1. @Configuration
    功能: 表示该类是一个配置类,Spring 容器可以从中获取 Bean 定义。此类通常包含一个或多个使用 @Bean 注解的方法,这些方法会返回要注册的 Bean 实例。
  2. @SpringBootConfiguration
    功能: 这是 Spring Boot 的一个特定注解,实际上是 @Configuration 的一个扩展。它用于标记主配置类,并且结合其他 Spring Boot 特性(如自动配置)工作。它通常用于标识 Spring Boot 应用的启动类。
  3. @Bean
    功能: 用于在 @Configuration 类中定义一个 Bean。被 @Bean 注解的方法会返回一个对象,该对象将被注册到 Spring 应用上下文中,以便其他组件可以依赖和使用。
  4. @Scope
    功能: 用于定义 Bean 的作用域。通过这个注解,可以指定 Bean 是单例(默认)还是多例,或者其他作用域(例如请求、会话等)。例如,@Scope(“prototype”) 表示每次请求该 Bean 时都会创建一个新的实例。
  5. @Controller
    功能: 用于标识一个控制器类,通常用于处理 Web 请求。Spring 会自动将被 @Controller 注解的类作为 MVC 模式中的控制器,并进行相应的组件扫描和管理。
  6. @Service
    功能: 用于标识一个服务类,通常用于业务逻辑层。被 @Service 注解的类会被 Spring 容器管理,并可以用作服务组件,以实现业务逻辑。
  7. @Repository
    功能: 用于标识一个数据访问层的类。被 @Repository 注解的类通常用于数据持久化操作,Spring 会为该类提供异常转换等功能,以便与数据库交互。
  8. @Component
    功能: 一个通用的组件注解,用于标识一个 Spring 组件。任何被 @Component 注解的类会被 Spring 容器自动扫描并注册为 Bean。可以用于没有特定角色的类。
  9. @Import
    功能: 用于导入其他配置类或普通类,使其成为当前配置类的一部分。使用此注解可以将多个配置类组合在一起,从而实现更加模块化的配置管理。
  10. @ComponentScan
    功能: 用于指定 Spring 应该扫描哪些包中的组件。默认情况下,Spring Boot 会扫描主应用程序类所在的包及其子包,使用 @ComponentScan 可以自定义扫描的路径。

步骤:

条件注解

条件注解 @ConditionalOnXxx 是 Spring Boot 提供的一组注解,用于根据特定条件决定是否加载某个 Bean 或配置类。这些注解通常用于自动配置,以确保只有在满足一定条件时,相关的配置才会生效。

  1. @ConditionalOnClass
    功能: 判断特定的类是否在类路径中。如果指定的类存在,则加载相应的 Bean。这对于可选依赖的支持非常有用。
@Bean
@ConditionalOnClass(name = "com.example.SomeLibrary")
public SomeLibrary someLibrary() {
    return new SomeLibrary();
}
  1. @ConditionalOnMissingClass
    功能: 与 @ConditionalOnClass 相反,判断特定的类是否不在类路径中。如果指定的类不存在,则加载相应的 Bean。
@Bean
@ConditionalOnMissingClass("com.example.SomeLibrary")
public AlternativeLibrary alternativeLibrary() {
    return new AlternativeLibrary();
}
  1. @ConditionalOnBean
    功能: 检查容器中是否存在指定类型或名称的 Bean。如果存在,则加载当前的 Bean。这通常用于确保某些依赖是可用的。
@Bean
@ConditionalOnBean(DataSource.class)
public MyRepository myRepository(DataSource dataSource) {
    return new MyRepository(dataSource);
}
  1. @ConditionalOnMissingBean
    功能: 检查容器中是否没有指定类型或名称的 Bean。如果不存在,则加载当前的 Bean。这用于提供默认实现,当用户没有定义自定义 Bean 时使用。
@Bean
@ConditionalOnMissingBean(MyService.class)
public MyService myService() {
    return new DefaultMyService();
}

场景:
● 如果存在 FastsqlException 这个类,给容器中放⼀个 Cat 组件,名cat01,
● 否则,就给容器中放⼀个 Dog 组件,名dog01
● 如果系统中有 dog01 这个组件,就给容器中放⼀个 User组件,名zhangsan
● 否则,就放⼀个User,名叫lisi

// 假设 FastsqlException 是一个自定义异常类
class FastsqlException extends Exception { }
// Cat 和 Dog 组件
class Cat {
    @Override
    public String toString() {
        return "I am a Cat, named cat01.";
    }
}
class Dog {
    @Override
    public String toString() {
        return "I am a Dog, named dog01.";
    }
}
// User 组件
class User {
    private String name;
    public User(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User: " + name;
    }
}
// 配置类
@Configuration
public class AnimalConfiguration {
    // 根据 FastsqlException 的存在与否选择 Cat 或 Dog
    @Bean(name = "cat01")
    @ConditionalOnClass(FastsqlException.class) // 如果存在 FastsqlException 类
    public Cat cat() {
        return new Cat();
    }
    @Bean(name = "dog01")
    @ConditionalOnMissingBean(name = "cat01") // 如果不存在 Cat,则创建 Dog
    public Dog dog() {
        return new Dog();
    }
    // 根据 dog01 的存在与否选择 User
    @Bean(name = "zhangsan")
    @ConditionalOnBean(name = "dog01") // 如果存在 dog01
    public User userZhangsan() {
        return new User("zhangsan");
    }
    @Bean(name = "lisi")
    @ConditionalOnMissingBean(name = "zhangsan") // 如果不存在 zhangsan
    public User userLisi() {
        return new User("lisi");
    }
}

属性绑定

@ConfigurationProperties
功能: 用于将配置文件中的属性绑定到 Java 类的字段。它可以帮助我们将外部配置(如 application.properties 或 application.yml 文件)映射到一个 POJO(Plain Old Java Object)中,从而方便地获取和使用这些配置信息。
使用方式:

@Component
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private String name;
    private int version;
	....
}

在 application.properties 文件中,可以这样配置:

app.name=My Application
app.version=1

@EnableConfigurationProperties
功能: 用于快速注册使用 @ConfigurationProperties 注解的类。它可以让 Spring 自动扫描并注册这些配置属性类。通常在主应用程序类或配置类上使用。

使用方式: 只需在配置类或主应用程序类上添加此注解,并传入希望注册的配置类。

@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private String name;
    private int version;
	....
}
@SpringBootApplication
@EnableConfigurationProperties(AppConfig.class) // 注册 AppConfig 一般用于导入第三方写好的组件进行数据绑定
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

在 Spring Boot 中,默认情况下只有主程序所在的包及其子包会被扫描。这意味着如果我们导入了第三方库的组件,即使这些组件上标注了 @Component 或 @ConfigurationProperties 注解,它们也不会被自动注册到 Spring 容器中。为了解决这个问题,我们可以使用 @EnableConfigurationProperties 注解来快速进行属性绑定,并将这些组件注册到容器中。这样,我们就能够有效地管理和使用来自第三方库的配置属性。

要将 Spring 容器中任意组件(Bean)的属性值与配置文件中的配置项进行绑定,可以按照以下步骤进行:

@SpringBootApplication 是一个用于简化 Spring Boot 应用程序配置的复合注解,它实际上由三个核心注解组成:

1.@SpringBootConfiguration:

  • 这是 @Configuration 的一个特化,表示该类是 Spring Boot 应用程序的主配置类。它允许我们定义 Spring 上下文中的 Bean,并可以通过 Java 配置的方式进行应用程序的设置。

2.@EnableAutoConfiguration:

  • 这个注解启用了 Spring Boot 的自动配置功能。根据项目的依赖和类路径,Spring Boot 会自动配置应用所需的各种组件。例如,如果检测到某个数据库驱动存在,Spring Boot 会自动配置数据源和相关的 JPA 设置。通过这个注解,开发者无需手动配置许多常见的设置,从而加快开发速度。

3.@ComponentScan:

  • 该注解告诉 Spring 在指定的包及其子包中扫描带有 @Component、@Service、@Repository 和 @Controller 等注解的组件。这允许 Spring 自动发现并注册这些组件为 Spring 容器中的 Bean。默认情况下,它会扫描注解所在类的包。

总结

通过本文,我们对 Spring Boot 有了全面的了解,包括如何快速启动项目、分析其应用场景以及掌握常用注解的使用方法。Spring Boot 提供的自动配置和约定优于配置的理念,使得开发流程更加高效和灵活。无论是初学者还是经验丰富的开发者,都能从中受益。

到此这篇关于Spring Boot快速入门、应用分析、常用注解的文章就介绍到这了,更多相关springboot常用注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文