SpringBoot如何实现starter原理详解

yizhihongxing

下面是对“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日

相关文章

  • MyBatis-plus+达梦数据库实现自动生成代码的示例

    接下来我将详细讲解如何使用MyBatis-plus和达梦数据库实现自动生成代码的步骤和注意事项。 环境准备 JDK 1.8及以上版本 Maven 3.5及以上版本 Spring Boot 2.x及以上版本 MyBatis-plus 3.x及以上版本 达梦数据库 JDBC 驱动程序 步骤一:添加依赖 首先,在使用 MyBatis-plus 时,需要添加相应的依…

    Java 2023年5月20日
    00
  • 零基础学Java:Java开发工具 Eclipse 安装过程创建第一个Java项目及Eclipse的一些基础使用技巧

    下面详细讲解“零基础学Java:Java开发工具 Eclipse 安装过程创建第一个Java项目及Eclipse的一些基础使用技巧”的完整攻略。 一、Eclipse的安装 首先,进入Eclipse官网https://www.eclipse.org/downloads/packages/installer,选择下载适合自己电脑操作系统的Eclipse版本。 下…

    Java 2023年5月24日
    00
  • Jackson2的JsonSchema实现java实体类生成json方式

    当使用Jackson2进行Java对象的序列化和反序列化时,我们可以使用Jackson2的JsonSchema功能来生成Java实体类的JSON描述。这些描述包括属性的标识符、类型和其他约束。它们可以用于生成文档、验证和其他用途。 以下是使用Jackson2的JsonSchema生成Java实体类的步骤: 步骤1. 添加依赖 要使用Jackson2的Json…

    Java 2023年5月26日
    00
  • Java 中的Printstream介绍_动力节点Java学院整理

    Java 中的PrintStream 介绍 什么是 PrintStream PrintStream 是 Java 中用于输出数据的一个类,提供了一系列的 print() 和 println() 方法实现输出功能。 PrintStream 常用的构造方法有两种: PrintStream(File file) PrintStream(OutputStream o…

    Java 2023年5月26日
    00
  • SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    下面给出详细的攻略以及两条示例说明。 1. 概述 本攻略主要介绍如何使用SpringMVC和Ajax实现文件批量上传和下载功能。SpringMVC提供了强大的文件处理能力,可以方便地上传和下载文件。而Ajax则可以实现异步上传和下载文件,提高用户体验。 2. 文件上传 2.1 配置文件上传相关bean 首先,需要在SpringMVC配置文件中添加以下配置: …

    Java 2023年6月15日
    00
  • Java filter中的chain.doFilter使用详解

    如何使用filter和chain来改变request和response? 本文将介绍如何在Java Web应用程序中使用过滤器(filter)和过滤器链(chain)来修改request和response。 过滤器是一种拦截器,可以拦截HTTP请求和响应,并在它们到达目的地之前或者退回客户端之前对它们进行修改。过滤器以链的方式组织在一起,可以按顺序执行。每个…

    Java 2023年6月15日
    00
  • JSP中实现判断客户端手机类型并跳转到app下载页面

    JSP是JavaServer Pages(Java服务器页面)的缩写,它是一种动态网页技术,允许我们在网页中插入Java代码,从而实现动态内容展示和逻辑控制。要实现判断客户端手机类型并跳转到app下载页面,我们需要从以下几个方面入手: 判断客户端的手机类型 根据不同的手机类型进行分流 跳转到app下载页面 下面具体讲解实现的步骤: 1. 判断客户端的手机类型…

    Java 2023年6月15日
    00
  • springMVC解决ajax请求乱码的三种方法

    在Spring MVC中,当使用Ajax发送请求时,可能会出现中文乱码的问题。这是因为Ajax默认使用UTF-8编码,而Spring MVC默认使用ISO-8859-1编码。为了解决这个问题,我们可以采取以下三种方法: 1. 使用过滤器 我们可以使用过滤器来解决Ajax请求中文乱码的问题。在过滤器中,我们可以将请求和响应的编码都设置为UTF-8。 下面是一个…

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