面试官:说说Spring中IoC实现原理?

开发 前端
IoC 实现方式有很多种,例如依赖注入(DI)或依赖查找等,但 DI 是实现 IoC 的一种常见实现方法,它通过将依赖项注入到对象中来实现控制反转。

IoC(Inversion of Control)即控制(权)反转,它是一种编程思想,它的核心理念是将对象的创建和管理权力从对象本身转移到外部的容器或框架。

IoC 的主要目的是降低代码之间的耦合度,提高代码的重用性、可测试性和灵活性。在 IoC 模式下,对象不需要自己创建或者查找它们所依赖的对象,这些工作由外部的容器(Spring)完成。

IoC 实现方式有很多种,例如依赖注入(DI)或依赖查找等,但 DI 是实现 IoC 的一种常见实现方法,它通过将依赖项注入到对象中来实现控制反转。

IoC 底层原理

Spring 中的 IoC 底层是通过工厂模式+反射实现的,具体来说,它的实现步骤是这样的:

首先,我们通过以下代码初始化 IoC 容器:

ApplicationContext context = 
    new ClassPathXmlApplicationContext("applicationContext.xml");

之后会创建一个工厂类,工厂类中有一个创建 Bean 的方法 createBean。

createBean 中首先会通过读取配置文件,获取到全类名,如下所示:

<beans>
    <bean id="myBean" class="com.example.MyBean" />
</beans>

之后通过反射,将获取到的全类名进行加载,创建对象存放到 IoC 容器中。

当有代码使用了 DI 时,从容器中找到(根据类名或类型查找)此实例进行使用,如下代码所示:

@Component
public class MyBean {
    @Autowired
    private MyBean myBean;
    public void doSomething() {
        System.out.println("Bean: " + myBean);
    }
}

课后思考

IoC 中的工厂模式对应了 Spring 源码中的哪个步骤?反射的核心实现代码有哪些?

责任编辑:姜华 来源: Java中文社群
相关推荐

2024-03-05 10:33:39

AOPSpring编程

2024-08-22 10:39:50

@Async注解代理

2024-08-29 16:30:27

2024-08-12 17:36:54

2024-02-29 16:49:20

volatileJava并发编程

2024-09-20 08:36:43

零拷贝数据传输DMA

2024-03-22 06:56:24

零拷贝技术数据传输数据拷贝

2021-05-20 08:34:03

CDN原理网络

2024-07-31 08:28:37

DMAIOMMap

2024-03-14 14:56:22

反射Java数据库连接

2024-03-01 11:33:31

2024-06-04 09:02:03

2021-06-07 17:12:22

线程安全Atomic

2023-12-27 18:16:39

MVCC隔离级别幻读

2021-10-28 19:32:16

微信原理程序

2024-03-11 18:18:58

项目Spring线程池

2024-09-04 17:35:09

2019-05-10 10:50:04

Spring AOPJDK动态代理CGLIB动态代理

2020-12-09 10:29:53

SSH加密数据安全

2024-05-30 08:04:20

Netty核心组件架构
点赞
收藏

51CTO技术栈公众号