当前位置: 首页 > news >正文

SpringBoot自动装配原理---Spring

自动装配原理

在这里插入图片描述

在 SpringBoot 项目的启动类上有一个 @SpringBootApplication 注解,这个注解是对三个注解进行了封装。
自动化配置机制中​核心注解:@EnableAutoConfiguration

@EnableAutoConfiguration

在这里插入图片描述

  • 通过 @Import 导入AutoConfigurationImportSelector配置选择器
  • 扫描以下路径的配置文件:
    • 项目自身的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
    • 项目自身以及依赖JAR包的META-INF/spring.factories(旧版)
  • ​条件装载:配置类中定义的Bean会根据条件注解决定是否注册到Spring容器

实现自定义类的自动配置

1. 创建自动配置类

package com.example.autoconfig;

import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

@AutoConfiguration
@ConditionalOnClass(MyService.class) // 当类路径中存在MyService时加载
@EnableConfigurationProperties(MyServiceProperties.class) // 启用配置属性
public class MyServiceAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean // 当容器中不存在该Bean时创建
    public MyService myService(MyServiceProperties properties) {
        return new MyService(properties.getPrefix(), properties.getSuffix());
    }
}

2. 创建配置属性类

package com.example.autoconfig;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "my.service")
public class MyServiceProperties {
    private String prefix = "Hello";
    private String suffix = "!";

    // getters and setters
    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

    public String getSuffix() {
        return suffix;
    }

    public void setSuffix(String suffix) {
        this.suffix = suffix;
    }
}

3. 创建自定义服务类

package com.example.autoconfig;

public class MyService {
    private final String prefix;
    private final String suffix;

    public MyService(String prefix, String suffix) {
        this.prefix = prefix;
        this.suffix = suffix;
    }

    public String greet(String name) {
        return prefix + " " + name + suffix;
    }
}

4. 注册自动配置类

在 src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中添加:
com.example.autoconfig.MyServiceAutoConfiguration

5. 使用自动配置

只需将上述项目使用 maven 打成 jar 包,在其他项目中添加依赖并配置属性即可使用,这就是标准 Starter 方式:

# application.yml
my:
  service:
    prefix: "Hi"
    suffix: "!!!"
@Service
public class SomeService {
    private final MyService myService;
    
    public SomeService(MyService myService) {
        this.myService = myService;
    }
    
    public void doSomething() {
        System.out.println(myService.greet("World"));
    }
}

相关文章:

  • import cv2 安装失败
  • 语法: value=label_address( label);
  • PyTorch池化层详解:原理、实现与示例
  • ctf-show-micsx
  • 【Kubernetes】StorageClass 的作用是什么?如何实现动态存储供应?
  • TLS 1.2 握手过程,每个阶段如何保证通信安全?​​
  • 古诗词数据集(74602条简体版、繁体版) | 智能体知识库 | AI大模型训练
  • iOS APP集成Python解释器
  • OpenCV 在树莓派上进行实时人脸检测
  • C++ 内存访问模式优化:从架构到实践
  • Redis之布隆过滤器
  • Unity3D仿星露谷物语开发34之单击Drop项目
  • 算法思想之滑动窗口(一)
  • 人脸专注度检测系统(课堂专注度检测、人脸检测、注意力检测系统)
  • 【C++】第九节—string类(中)——详解+代码示例
  • JVM深入原理(六)(一):JVM类加载器
  • 基于51单片机和8X8点阵屏、独立按键的双人弹球小游戏
  • 智能气候:AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测中的应用
  • 区块链日记6 - Solana入门 - PDA增删改查数据1
  • 【数据结构】并查集应用
  • 做淘宝客网站是如何盈利的/网站设计方案模板
  • 用苹果手机做网站/国内十大软件测试培训机构
  • 网站产品设计规范 模板/天津优化网络公司的建议
  • dede大气企业网站模板(一屏展示)/太原seo
  • 厦门帮忙建设网站/百中搜优化软件
  • 苏州网站建设招聘/seo排名怎么做