Spring5学习(一):为什么要使用IOC以及IOC容器底层原理

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 什么是IOC:控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理使用IOC目的:为了耦合度降低

什么是IOC:控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理


使用IOC目的:为了耦合度降低


首先提出一个问题:如果现在有两个类,一个是UserService,一个是UserDao。UserDao中有一个方法add(),我们想在UserService的execute()方法中调用add方法,改如何做?

最简单的方式当然是实例化对象,

20210811142535398.png


具体代码:


UserDao.java:

class UserDao{
  public void add(){
    System.out.println("hahaha");
  }
}


UserService.java:

public class UserService {
    public void execute(){
        UserDao dao = new UserDao();
        dao.add();
    }
}


但这种方法有个致命的问题,就是耦合度太高。

那我们就要想办法降低耦合度。


首先想到的是工厂设计模式:

我们先建立一个工厂类UserFactory:


public class UserFactory {
    public static UserDao getDao(){
        return new UserDao();
    }
}


将UserService改为:

public class UserService {
    public void execute(){
        UserDao dao = new UserFactory().getDao();
    }
}


思路图:


20210811142604764.png


这样确实降低了UserDao和UserFactory的耦合度,但是UserService和UserDao之间的耦合度还是比较高,并没有使耦合度降到最低。

这就需要用到IOC容器了,下面是IOC容器的原理:

20210811165058174.png


相关文章
|
1月前
|
XML Java 开发者
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
36 0
|
4天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
2天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
11天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
55 14
|
8天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
40 6
|
24天前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
44 2
|
23天前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
32 1
|
1月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
1月前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
49 1
|
1月前
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序