自定义一个spring自动配置类

简介: 自定义一个spring自动配置类

项目中可以把一些自定义的类库以及第三方类库,制作自动加载类,从而实现引包即可使用的开箱即用效果。

三方库

假设有一个第三方库 paw-autoconfig-module

有一些类及服务方法

package com.paw.autoconfig.module;

// 选取一个类作为标识类
public interface ClientOption {
}

服务类

package com.paw.autoconfig.module;

// 存在一些服务类
public class SkyService {

  public String deliver(String box){
    return "delivered box "+ box;
  }
}

自动配置类

paw-autoconfig

引入三方依赖库,注意:optional true 选项

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
    <groupId>com.paw.demos</groupId>
    <artifactId>paw-autoconfig-module</artifactId>
    <version>1.0-SNAPSHOT</version>
    <optional>true</optional>
  </dependency>
</dependencies>

添加配置类

package com.paw.autoconfig.module;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(ClientOption.class)
public class PawModuleAutoConfiguration {

  // 定义服务bean
  @Bean
  public SkyService skyService(){
    return new SkyService();
  }

}

META-INF下添加spring.factories文件,添加自动装配引导类

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.paw.autoconfig.module.PawModuleAutoConfiguration

将jar包导入到mvn 仓库

mvn clean install

使用自动装配的类

创建一个新工程 paw-auto-app

加入依赖,当不引人三方依赖paw-autoconfig-module时不进行三方服务的自动装配 skyService不能使用。

<dependencies>
    <dependency>
      <groupId>com.paw.demos</groupId>
      <artifactId>paw-autoconfig</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

  <!-- 三方依赖包 -->
    <dependency>
      <groupId>com.paw.demos</groupId>
      <artifactId>paw-autoconfig-module</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

开箱即用 自动配置的服务类

package com.paw.auto.app.controller;

import com.paw.autoconfig.module.SkyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author rubble
 * @date 2021/8/10
 **/
@RestController
public class HelloController {

  // 注入自动装配的类
  @Autowired
  SkyService skyService;

  @GetMapping("/")
  public String index(String box){
    return skyService.deliver(box) + System.currentTimeMillis();
  }

  @GetMapping("/index")
  public String index(){
    return System.currentTimeMillis()+"";
  }

}

启动服务,测试服务 访问 http://localhost:8080/?box=gift

输出 delivered box gift1628584106778 skyService 服务调用成功。

此种写法适合装配三方类库的情景。

redis本就是一个独立于spring之外的组织,springboot提供了对三方库redis的集成。

springframework是一个框架,集成了大量的三方类库,如spring-boot-xx-starter、spring-cloud-xx-starter。

对于项目中自定义starter对@ConditionalOnClass使用不多,常用@ConditionalOnProperty 使用属性来控制是否进行配置类加载,使用@ConditionalOnMissingBean提供默认bean的注入。

相关文章
|
1月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
1月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
1月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
29天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
260 4
|
1月前
|
监控 安全 Java
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
Spring Boot 通过 Actuator 模块提供了强大的健康检查功能,帮助开发者快速了解应用程序的运行状态。默认健康检查可检测数据库连接、依赖服务、资源可用性等,但在实际应用中,业务需求和依赖关系各不相同,因此需要实现自定义健康检查来更精确地监控关键组件。本文介绍了如何使用 @HealthEndpoint 注解及实现 HealthIndicator 接口来扩展 Spring Boot 的健康检查功能,从而提升系统的可观测性与稳定性。
108 0
使用 @HealthEndpoint 在 Spring Boot 中实现自定义健康检查
|
1月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
100 0
探索Spring Boot的@Conditional注解的上下文配置
|
2月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
770 10
|
3月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
771 0
|
6天前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
94 3
|
6天前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
272 2