tulip notes
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Star-Lord

希望一天成为大师的学徒
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 探索SpringBoot

    • 初步认识SpringBoot
    • 自定义starter
    • 一些常用注解
    • 自动装配
    • spring中开启事务
    • Spring中事务的属性
    • SpringBoot启动流程
    • Spring中Bean的创建跟循环依赖
    • IOC的实现机制是什么
      • 实现机制
  • 常用功能实现

  • Security认证授权

  • 扩展

  • 实战与注意事项

  • 其它

  • 《SpringBoot》笔记
  • 探索SpringBoot
EffectTang
2024-11-25
目录

IOC的实现机制是什么

# IOC的实现机制是什么

# 实现机制

本质是通过 简单工厂+反射的机制来实现。

在简单工厂中,我们往往需要传入一个参数,从而让工厂来决定生产什么产品。那在IOC中,我们传入的参数是什么呢?

public class OperationFactory {
    public static Operation createOperation(String operator) {
        if (operator == null || operator.isEmpty()) {
            throw new IllegalArgumentException("Operator cannot be null or empty");
        }
        switch (operator) {
            case "+":
                return new Addition();
            case "-":
                return new Subtraction();
            default:
                throw new IllegalArgumentException("Unsupported operation: " + operator);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

以上就是一个简单工厂类 OperationFactory,会根据传入的参数决定创建哪种类型的 Operation 对象。

细心且具有探索精神的朋友应该会发现,spring的源码中有一个BeanFactory类,没错,BeanFactory 就是所谓的Bean工厂。不过它被设计成了接口,它是Spring IoC容器的核心接口之一(说明Bean的创建与管理比我们现在探讨的要复杂),它提供了基本的依赖注入功能。BeanFactory 负责管理Bean的生命周期和配置,是Spring框架中最基础的IoC容器。

public interface BeanFactory {
    Object getBean(String name) throws BeansException;
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
    Object getBean(String name, Object... args) throws BeansException;
    <T> T getBean(Class<T> requiredType) throws BeansException;
    <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
    boolean containsBean(String name);
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;
    String[] getAliases(String name);
}
1
2
3
4
5
6
7
8
9
10
11
12

那BeanFactory的实现类会根据什么参数来创建Bean呢?

传入类路径通过反射来进行创建。

本文待补充

上次更新: 2025/04/23, 16:23:16
Spring中Bean的创建跟循环依赖
SpringBoot常用功能实现_1

← Spring中Bean的创建跟循环依赖 SpringBoot常用功能实现_1→

最近更新
01
面向切面跟自定义注解的结合
05-22
02
时间跟其他数据的序列化
05-19
03
数据加密与安全
05-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EffectTang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式