SpringBoot Application注解原理及代码详解

SpringBootApplication注解原理及代码详解

1. Spring Boot介绍

​ Spring Boot是一个应用于快速创建基于Spring框架的应用程序的工具。它大大简化了Spring应用程序的搭建和开发流程, 十分适合用于微服务开发等快速迭代的场景。

2. SpringBootApplication注解

​ SpringBootApplication 是重要的注解之一。这个注解主要是用来标记 Spring Boot 启动类的,它整合了三个注解:@Configuration、@EnableAutoConfiguration、@ComponentScan。

2.1 @Configuration注解

​ 指示 Spring IoC 容器应该将带有该注解的类作为一个配置类来处理。

@Configuration
public class MyConfiguration {
    // 配置相关内容
}

2.2 @EnableAutoConfiguration注解

​ 开启自动配置。它通过一系列操作,扫描classpath下的所有jar包和项目自身的类,识别出哪些是SpringBoot的可配置类,自动进行配置。

/**
 * 如果不想使用@EnableAutoConfiguration注解,在SpringBoot 2.4及以上版本可以使用以下两个注解之一:
 */
//@SpringBootApplication(exclude = { 
//        DataSourceAutoConfiguration.class,
//        DataSourceTransactionManagerAutoConfiguration.class,
//        HibernateJpaAutoConfiguration.class
//})
//@SpringBootConfiguration
//@EnableAutoConfiguration
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

2.3 @ComponentScan注解

​ 指示 Spring 扫描程序包(默认为是启动类所在的包及其子包)以查找组件。使用该注解时不指定任何参数的情况下,Spring Boot只会扫描启动类所在的包及其子包,其他的依赖组件如果不在该包下或子包下的话,将无法被扫描到。

@ComponentScan(basePackages = { "com.example" })
@SpringBootApplication
public class SampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

3. SpringBootApplication代码详解

​ 下面通过两个 SpringBootApplication 代码示例,详细解释 Spring Boot 的自动配置原理。

3.1 SpringBootApplication示例1

@SpringBootApplication
public class SampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

​ 上述代码主要包含了@SpringBootApplication注解,其中包含了@ComponentScan注解和@EnableAutoConfiguration注解,用于指示 Spring Boot 开始运行,并自动配置项目。

​ @SpringBootApplication是一个复合注解,它从三个注解中组合而成,具体如下:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}

​ 其中,@SpringBootConfiguration是Spring的 Configuration 注解的升级版,使得我们不必在类中显式地使用@Configuration来注解该类为Spring IoC容器的配置类。

3.2 SpringBootApplication示例2

​ 下面就来看一下通过自定义配置文件的方式,自定义 Spring Boot 的一些配置。

​ application.yml

server:
  port: 8081
spring:
  profiles:
    active: dev

​ 定义了端口号为8081,并设置激活的环境为dev。接下来,定义 MyProperties 类并使用@ConfigurationProperties注解来绑定配置文件中带有“my”前缀的参数:

@Configuration(proxyBeanMethods = false)
@ConfigurationProperties(prefix = "my")
public class MyProperties {
    private String name;
    private String greeting;

    // getter 和 setter
}

​ 然后定义测试用的 Controller:

@RestController
public class MyController {
    private final MyProperties properties;

    public MyController(MyProperties properties) {
        this.properties = properties;
    }

    @GetMapping("/")
    public String hello() {
        return properties.getGreeting() + " " + properties.getName() + "!";
    }
}

​ 最后,定义一个启动类:

@SpringBootApplication
@EnableConfigurationProperties(MyProperties.class)
public class SampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

​ 可以看到,SampleApplication类除了@SpringBootApplication注解之外,还使用了@EnableConfigurationProperties注解来注入MyProperties类。在配置文件中定义了带有“my”前缀的变量后,就可以启动应用并访问http://localhost:8081/来测试控制器中读取配置的功能。

4. 总结

​ Spring Boot 通过@SpringBootApplication注解实现自动扫描、自动配置、快速启动、便捷的开发的功能,是一个很好的微服务框架。通过注解的方式,Spring Boot 使得开发人员能够更加便捷地进行项目开发,加快开发速度,减少开发工作量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot Application注解原理及代码详解 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Dom4j解析XML_动力节点Java学院整理

    Dom4j解析XML_动力节点Java学院整理 什么是Dom4j? Dom4j是一个为Java设计的XML API,它可以读取、写入、解析XML文件 Dom4j具有快速、高效和易于使用等特点,因此得到广泛应用 Dom4j的安装和配置 下载Dom4j:在Dom4j官网(http://dom4j.github.io/)下载最新的Dom4j Jar包 添加Dom4…

    Java 2023年5月27日
    00
  • 解决问题:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources

    解决问题: Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources 这个问题通常出现在使用Maven构建项目时,执行了clean install命令,Maven在构建过程中提示如下错误: Failed to execute goal org.…

    Java 2023年6月2日
    00
  • Android编程实现随机生成颜色的方法示例

    下面就为您详细讲解“Android编程实现随机生成颜色的方法示例”的完整攻略。 一、问题描述 在Android应用程序中,我们有时需要使用随机生成的颜色来装饰或突出显示某些元素,那么如何在Android编程中实现随机生成颜色的功能呢? 二、实现思路 在Android编程中,我们可以使用Java的Random类来生成随机颜色,并将其应用于要装饰或突出显示的元素…

    Java 2023年6月1日
    00
  • 什么是G1收集器?

    G1 (Garbage-First)收集器是一款面向服务器端的垃圾收集器,它是JDK 9之后默认的垃圾收集器。与CMS和Parallel Scavenge收集器相比,G1收集器具有更好的吞吐量和更短的暂停时间。接下来,我们将详细讲解G1收集器的使用攻略,包括以下内容: G1收集器的优势和适用场景 G1收集器的参数调优 G1收集器的使用示例 G1收集器的优势和…

    Java 2023年5月10日
    00
  • java使用正则表达式查找包含的字符串示例

    关于Java使用正则表达式查找包含的字符串示例,可以按照以下步骤进行: 步骤一:创建Pattern对象 为了使用正则表达式,需要首先创建一个Pattern对象。可以使用Pattern类提供的静态方法compile()来实现,如下所示: Pattern pattern = Pattern.compile("要查找的正则表达式"); 正则表达…

    Java 2023年5月27日
    00
  • android 网络编程之网络通信几种方式实例分享

    Android 网络编程之网络通信几种方式实例分享 在Android应用的开发中,经常需要与远程服务器进行网络通信来获取数据,这就需要使用Android网络编程来实现。本文将介绍Android网络编程中几种常见的网络通信方式,并通过示例来说明。 1. HttpURLConnection HttpURLConnection 是一个用于发送HTTP/HTTPS请…

    Java 2023年6月15日
    00
  • java asp分析各种搜索引擎的关键字,自动识别url 中关键字的编码

    为了实现搜索引擎关键字分析和自动识别URL中的关键字编码,我们需要进行以下步骤: 1. 获取URL中的关键字 我们可以使用Java语言的URLDecoder类中的decode方法,对URL进行解码,得到其中的关键字。具体代码示例如下: String url = "https://www.baidu.com/s?wd=%E6%90%9C%E7%8B%…

    Java 2023年5月20日
    00
  • js表达式计算器代码

    以下是“JS表达式计算器代码”的完整攻略: 概述 JS表达式计算器代码是一个基于JavaScript语言,可以实现简单的表达式计算的小程序。 实现步骤 创建HTML文件,包含输入框、按钮和输出框等必要元素。 编写JavaScript代码,实现计算功能。 获取输入框里的表达式。 利用正则表达式匹配数字和运算符,并将它们保存在数组中。 计算表达式的值。 将计算结…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部