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日

相关文章

  • Java C++ 算法题解leetcode669修剪二叉搜索树示例

    Java C++ 算法题解leetcode669修剪二叉搜索树示例 问题描述 给定一个二叉搜索树,同时给定区间[L,R],将BST中所有小于L的节点和大于R的节点剪枝。 解法 题目要求我们剪掉所有小于L的节点和大于R的节点,我们可以采取遍历整个二叉搜索树的方式,检查每个节点是否在指定区间[L,R]内。如果当前节点的值小于L,则需要删除当前节点的左子树中所有节…

    Java 2023年5月19日
    00
  • Java实现文件分割与合并

    当我们处理大量数据时,文件分割与合并是一项非常重要的技能。对于Java开发者来说,使用Java实现文件分割与合并是一项基本技能。下面是一些示例,解释如何使用Java实现这些操作。 1. 文件分割 对大型文件进行分割是一种常见的文件处理方式。Java提供了许多方法来实现此目的。以下代码显示了如何使用Java分割文件: import java.io.*; pub…

    Java 2023年5月20日
    00
  • javaweb之web入门基础

    JavaWeb 之 Web 入门基础 简介 Java Web 是一种通过 Java 开发的应用程序,可通过互联网或局域网访问,具有可靠、安全和跨平台的特点,在互联网应用开发中具有广泛的应用。JavaWeb 主要分为三层:表现层、业务层、持久化层。其中,表现层主要负责用户交互和界面展示。 HTML 基础 HTML (Hypertext Markup Langu…

    Java 2023年5月19日
    00
  • Springboot之整合Socket连接案例

    在Spring Boot应用程序中,我们可以使用Socket连接来实现客户端和服务器之间的通信。以下是实现Spring Boot整合Socket连接的完整攻略: 创建服务器端 在Spring Boot应用程序中,我们可以创建一个服务器端来监听客户端的连接请求。以下是一个示例: @Component public class SocketServer { pr…

    Java 2023年5月15日
    00
  • Springboot动态切换数据源的具体实现与原理分析

    下面开始讲解“Springboot动态切换数据源的具体实现与原理分析”的完整攻略。 一. 实现原理分析 1.1. 多数据源的实现方式 在多数据源的实现中,我们不能像单数据源的实现那样,在 application.properties 或 application.yml 中写入数据源的配置信息。我们需要寻找一种实现方式,能够在程序运行期间动态配置数据源信息。 …

    Java 2023年5月20日
    00
  • SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解

    一、概述 本文将详细介绍如何在SpringBoot应用程序中使用JmsTemplate集成队列模式和主题模式。本文将提供XML和JavaConfig两种配置方式。我们将从简单的应用程序开始,使用单个生产者和单个队列或主题。然后,我们将更改为多个生产者和多个队列和主题。通过本文,您将了解如何在SpringBoot应用程序中集成消息传递,以便实现单个或分布式系统…

    Java 2023年5月19日
    00
  • Java Json字符串的双引号(“”)括号如何去掉

    想要去掉Java Json字符串中的双引号(“”)括号,需要使用Java中的字符串替换函数。以下是具体步骤: 获取Json字符串 要去掉Json字符串中的双引号(“”)括号,首先需要先获取Json字符串。可以使用Java中的字符串变量或从外部文件中读取文件内容等方法获取Json字符串。 用replaceAll()函数去掉双引号和括号 在Java中,使用rep…

    Java 2023年5月26日
    00
  • java向mysql插入数据乱码问题的解决方法

    Java 向 MySQL 插入数据时出现乱码问题是比较常见的问题,这是因为 Java 默认使用的字符集编码和 MySQL 默认的字符集编码不一致所导致的。下面是解决方法的完整攻略。 一、理解字符集编码 字符集编码是指用来表示字符在计算机中的二进制数据集合,是一种规范。计算机要读取和处理文本,必须将字符集编码转换成二进制数据,才能传递给计算机处理。常用的字符集…

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