SpringBoot如何实现starter原理详解

下面是对“SpringBoot如何实现starter原理详解”的详细讲解:

什么是starter

在Spring Boot中,starter是一种基于依赖项的,提供了与特定目标功能相关的,预配置的Spring配置的实现方式。它为应用程序的开发者提供了一种快速启动他们的应用程序所需的依赖项和配置的方法。

在常见的web应用程序中,启动应用程序需要一定程度的常规设置和贡献。例如,要构建一个需要使用JDBC进行数据访问的基本Web应用程序,您需要至少在应用程序中添加以下Bean:一个DataSource,一个JdbcTemplate,一个PlatformTransactionManager等等。每次需要这样做的时候都需要执行一堆类似的任务,这很麻烦并且很浪费时间和精力。

因此,Spring Boot为这个问题提供了一种更好的解决方案:即可以将所有必需的配置打包成一个常规的starter,并将其提供给开发者使用。

starter的实现原理

starter的实现原理非常简单:利用了Spring Boot提供的自动配置和自动装配的机制。

首先,在进行自动配置时,Spring Boot framework会在classpath中查找所有的META-INF/spring.factories文件,并查找属性名为org.springframework.boot.autoconfigure.EnableAutoConfiguration的条目。如果这个属性被指定为一个容器,那么这个容器中的所有类会被自动配置到当前应用程序上下文中。

然后,在进行自动装配时,Spring Boot会引用已有starter模块中的Bean,并自动注入到当前应用程序的上下文中。这就是利用starter实现自动装配的过程。

如何创建一个starter

首先,创建一个新的Maven项目,并在该项目中添加需要的依赖项。然后,在src/main/resources目录下创建一个新的spring.factories文件,并指定org.springframework.boot.autoconfigure.EnableAutoConfiguration属性,同时在文件中添加您要提供的自动配置类。

例如,下面的代码块演示了如何创建一个自动配置的配置类:

@Configuration
public class MyConfiguration {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

接下来,创建一个模块并将其打包成jar文件。将该jar文件作为依赖项添加到任意一个使用该starter的Maven项目中即可。

下面的代码块演示了如何在这个Maven项目中使用自定义starter。

<dependencies>
    <dependency>
        <groupId>com.example.my</groupId>
        <artifactId>my-spring-boot-starter</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

这意味着,任何使用这个starter的应用程序都将自动包含您提供的自动配置类中的Bean。

示例一:创建一个自定义的logging starter

假设您想要为您的应用程序添加自定义日志库。那么,您可以创建一个自定义starter,并在其中添加必需的依赖项和自动配置类。

  1. 首先,创建一个新的Maven项目,并添加log4j的依赖项。在Maven项目中的pom.xml文件中添加以下代码:

xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>

  1. 然后,创建你的自动配置类。在您的Maven项目的com.example.logging.config包中,创建一个新的LoggingAutoConfiguration类 。并在该类中添加以下代码:

java
@Configuration
public class LoggingAutoConfiguration {
@Bean
public LoggingSystem getLoggingSystem() {
return LoggingSystem.get(Log4j2LoggingSystem.class.getClassLoader());
}
}

以上代码定义了一个LoggingSystem类型的Bean, 此Bean用于加载Log4j2日志系统并进行初始化。

  1. 最后,在您的Maven项目的src/main/resources目录中创建一个新的spring.factories文件,并添加以下内容:

properties
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.logging.config.LoggingAutoConfiguration

以上代码定义了您的Starter的名称和它需要自动配置的类。

  1. 完成所有的配置后,您可以将该Maven项目打成jar包并上传到您的Maven仓库中。然后,在您的web应用程序的Maven pom.xml文件中添加以下依赖项:

xml
<dependency>
<groupId>com.example.logging</groupId>
<artifactId>logging-spring-boot-starter</artifactId>
<version>1.0</version>
</dependency>

这样即可完成您的日志库starter的创建。

示例二:创建一个自定义的security starter

假设您想要为您的应用程序添加Spring Security,并使得它自动配置一些必需的Security Bean。那么,您可以创建一个自定义starter,并在其中添加必需的依赖项和自动配置类。

  1. 首先,创建一个新的Maven项目,并添加Spring Security的依赖项。在Maven项目中的pom.xml文件中添加以下代码:

xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>${spring.boot.version}</version>
</dependency>
</dependencies>

  1. 然后,创建你的自动配置类。在您的Maven项目的com.example.security.config包中,创建一个新的SecurityAutoConfiguration类,并在该类中添加以下代码:

```java
@Configuration
public class SecurityAutoConfiguration {
@Bean
public AuthenticationManager authenticationManager() throws Exception {
return new ProviderManager(Arrays.asList(authenticationProvider()));
}

    @Bean
    public AuthenticationProvider authenticationProvider() {
        return new MyAuthenticationProvider();
    }
}

```

以上代码定义了两个Bean: authenticationManager()和authenticationProvider()。这些Bean用于对Spring Security进行自动配置。当某个Bean需要authenticationProvider()时,它将自动使用您定义的Bean。

  1. 最后,在您的Maven项目的src/main/resources目录中创建一个新的spring.factories文件,并添加以下内容:

properties
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.security.config.SecurityAutoConfiguration

以上代码定义了您的Starter的名称和它需要自动配置的类。

  1. 完成所有的配置后,您可以将该Maven项目打成jar包并上传到您的Maven仓库中。然后,在您的web应用程序的Maven pom.xml文件中添加以下依赖项:

xml
<dependency>
<groupId>com.example.security</groupId>
<artifactId>security-spring-boot-starter</artifactId>
<version>1.0</version>
</dependency>

这样即可完成您的Security starter的创建。

总结:

以上就是“Spring Boot如何实现starter原理详解”的完整攻略,其中两个实例分别是创建一个自定义的logging starter和创建一个自定义的security starter。任何一个使用这样的starter的应用程序在启动时都将自动加载您指定的依赖项和自动配置信息,从而更加方便快捷地构建web应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot如何实现starter原理详解 - Python技术站

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

相关文章

  • 详谈表单重复提交的三种情况及解决方法

    下面是“详谈表单重复提交的三种情况及解决方法”的完整攻略: 1. 表单重复提交的三种情况 1.1 点击提交按钮多次 用户在提交表单后,可能会多次点击“提交”按钮。这种情况下,表单会被重复提交。 1.2 网络延时导致重复提交 在网络较慢的情况下,用户提交表单后等待太久,以至于以为提交没有成功而重新提交。这种情况下,表单也会被重复提交。 1.3 刷新页面导致重复…

    Java 2023年6月15日
    00
  • Java十道入门易踩坑题分析后篇

    Java十道入门易踩坑题分析后篇 1. 理解Java中的基本数据类型 在Java中,基本数据类型包括整型、字符型、布尔型、浮点型和字节型。其中,整型包括byte、short、int和long四种类型;浮点型包括float和double两种类型;字符型只有char一种类型;布尔型只有boolean一种类型。 在使用基本数据类型时需要注意以下几点:- 整型的范围…

    Java 2023年5月23日
    00
  • Spring Boot2开发之Spring Boot整合Shiro两种详细方法

    SpringBoot2开发之SpringBoot整合Shiro两种详细方法 Shiro是一个强大且易于使用的Java安全框架,可以提供身份验证、授权、加密和会话管理等功能。本文将详细讲解如何在Spring Boot应用程序中整合Shiro,包括两种详细方法。 方法一:使用Shiro Spring Boot Starter Shiro Spring Boot …

    Java 2023年5月15日
    00
  • 初学java常用开发工具介绍

    初学Java常用开发工具介绍 Java是一门广受欢迎的编程语言,它在企业级应用开发中也有比较广泛的应用。针对初学者来说,选择一个适合自己的开发工具,能够大大提高编写程序的效率。本文将介绍初学Java常用的开发工具列表和使用方法。 一、常用开发工具列表 1. Eclipse Eclipse 是一个全功能开发平台,支持Java开发以及多种其他编程语言。它是一个基…

    Java 2023年6月15日
    00
  • 详解美团实现搜索关键词自动匹配功能的方法

    以下是详解美团实现搜索关键词自动匹配功能的方法的完整攻略: 介绍 美团实现搜索关键词自动匹配功能的方法可分为两个方面:前端交互和后端搜索引擎的支持,下面将对这两个方面一一解释。 前端交互 前端交互实现起来比较简单,主要分为以下两个步骤: 1. 给输入框添加键盘监听事件 这个步骤的意思是监听用户在输入框中的输入,并将输入的内容发送到后端搜索引擎进行匹配。代码如…

    Java 2023年5月19日
    00
  • 使用spring data的page和pageable如何实现分页查询

    使用Spring Data的Page和Pageable可以很方便地实现分页查询。下面是实现分页查询的完整攻略: 1. 添加依赖 首先需要在pom.xml中添加Spring Data JPA和对应的数据库驱动依赖: <dependency> <groupId>org.springframework.data</groupId&gt…

    Java 2023年5月20日
    00
  • Android编程开发之打开文件的Intent及使用方法

    Android编程开发之打开文件的Intent及使用方法 在Android应用程序中,我们经常需要打开文件,比如图片、视频、音乐、文档等等,这时就要用到Intent。Intent是Android中的重要组成部分,它用于在不同应用程序之间进行交互,比如启动Activity、启动Service、启动BroadcastReceiver等等。 打开文件的Intent…

    Java 2023年6月15日
    00
  • 使用dynamic datasource springboot starter实现多数据源及源码分析

    下面我们来详细讲解使用dynamic datasource springboot starter实现多数据源及源码分析的完整攻略。 什么是dynamic datasource springboot starter? dynamic datasource springboot starter是一款基于spring boot的多数据源解决方案,可以支持动态添加和…

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