自定义一个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 Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
50 0
|
5天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
44 14
|
2天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
19 6
|
4天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
32 3
|
1月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
37 1
|
25天前
|
安全 Java 应用服务中间件
如何将Spring Boot应用程序运行到自定义端口
如何将Spring Boot应用程序运行到自定义端口
39 0
|
XML 前端开发 Java
Spring 最常用的 7 大类注解,史上最强整理!
随着技术的更新迭代,Java5.0开始支持注解。而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架。
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
228 2
|
27天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
43 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
43 2
 SpringBoot入门(7)- 配置热部署devtools工具
下一篇
DataWorks