首页 > 其他分享 >颠覆性的Spring IOC

颠覆性的Spring IOC

时间:2023-09-30 23:24:11浏览次数:25  
标签:容器 依赖 对象 Spring Bean 颠覆性 IOC

一、什么是 Spring IOC?

  • Spring IOC(Inversion of Control,控制反转)是Spring框架的核心概念之一,也是Spring框架实现轻量级和解耦的关键。
  • IOC的基本思想是将对象的创建、依赖关系的管理、对象的生命周期等任务交给容器来完成,而不是由开发者手动管理。在传统的程序开发中,对象的创建和依赖关系需要开发者显式地编码实现,导致代码紧耦合,难以维护和扩展。而IOC通过反转了控制权,容器负责创建对象并管理它们的依赖关系,开发者只需要定义好对象及其依赖关系的配置,由容器自动完成后续的工作。
  • Spring IOC的实现方式主要依赖于依赖注入(Dependency Injection,DI)。依赖注入是IOC的一种具体实现方式,通过注入的方式将对象所需的依赖项(例如其他对象、配置值等)自动注入到对象中。开发者只需要在目标对象中声明依赖关系,由容器负责解析依赖关系并注入相应的依赖项。

 

 二、Spring IOC 本质

  • 控制反转 IoC(Inversion of Control),其中 DI(依赖注入)是实现 IoC 的一种方法,在没有 IoC 的程序中。我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,所谓控制反转就是:获得依赖对象的方式反转了。

  • IoC 是 Spring 框架的核心内容,使用多种方式完美地实现了 IoC,可以使用 XML 配置,也可以使用注解,新版本的 Spring 也可以零配置实现 IoC。Spring 容器在初始化时先读取配置文件,根据配置文件或元数据,创建并组织对象存入容器中,程序使用时再从 Ioc 容器中取出需要的对象。控制反转是一种通过描述(XML 或注解)并通过第三方去生产或获取特定对象的方式。在 Spring 中实现控制反转的是 IoC 容器,其实现方法是依赖注入(Dependency Injection,DI)

 三、Spring IOC 实例

  1. Spring IOC 的颠覆性在于它改变了传统的程序设计思想,将对象之间的依赖关系交给 Spring 容器来管理,从而实现对象的解耦和便于维护。这种设计思想使得开发人员可以更加专注于业务逻辑的开发,而不必关心对象之间的依赖关系,从而提高了开发效率和维护性。
  2. 以下是一个简单的 Spring IOC 源码实例:
  • 首先,我们需要定义一个接口和它的实现类:
public interface UserService {
    void addUser(String name);
}

public class UserServiceImpl implements UserService {
    @Override
    public void addUser(String name) {
        System.out.println("添加用户:" + name);
    }
}
  • 接下来,我们通过 Spring 的注解来配置容器,将 UserServiceImpl 注册为一个 Bean:
@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}
  • 最后,我们在应用程序中使用 UserService 这个 Bean:
@Component
public class UserController {
    private final UserService userService;

    @Autowired // 自动装配userService Bean
    public UserController(UserService userService) {
        this.userService = userService;
    }

    public void addUser(String name) { //调用userService的方法
        userService.addUser(name);
    }
}

  在这个例子中,我们使用了 Spring 的注解@Component标记UserController类为一个 Bean。同时,在UserController的构造函数上使用@Autowired注解,告诉 Spring 容器需要将UserService这个 Bean 注入到UserController中。这样,我们就可以在UserController中使用UserService这个 Bean 了。

四、总结

  • Spring IOC(控制反转)是 Spring 框架中的一个核心概念,它改变了传统的程序设计思想。通过将对象之间的依赖关系交给 Spring 容器来管理,实现对象的解耦和便于维护。使用 Spring IOC,开发人员可以更加专注于业务逻辑的开发,而不必关心对象之间的依赖关系,从而提高了开发效率和维护性。
  • 在 Spring 中,通过注解和配置文件,可以轻松地将 Bean 注入到其他 Bean 中,从而实现更加灵活的代码设计和开发。总之,Spring IOC 是现代软件开发中不可或缺的一个重要工具,它可以帮助我们更好地组织和管理我们的代码。

标签:容器,依赖,对象,Spring,Bean,颠覆性,IOC
From: https://www.cnblogs.com/visioning/p/17738389.html

相关文章

  • SpringBoot框架大晚上报错404--我的路径问题(附上SpringBoot MVC管理系统的简单具体代
    代码application.ymlspring:web:resources:static-locations:classpath:/static/,classpath:/templates/datasource:type:com.alibaba.druid.pool.DruidDataSourceurl:jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf......
  • springboot整合mybatisPlus全技巧(1-整合过程)
    本文基于springboot整合mybatisPlus的各种文章早已烂大街的背景下,根据整合过程,MP开发中的常见技巧,MP开发中遇到的各种坑三个方面,来对这一专题做一个全面且实用的总结,基本上只要你吃透这篇文章,开发中关于mybatisplus你能遇到的问题都能迎刃而解了。整合过程网上对于springboot......
  • 202309301820_《Spring boot项目,继承mybatis-generator遇到的问题及解决》
     当配置到最后,双击右侧maventab,准备生成时,报红:1.“Loadingclass`com.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassis`com.mysql.cj.jdbc.Driver'.ThedriverisautomaticallyregisteredviatheSPIandmanualloadingofthedriverclassisgen......
  • Spring framework vs Spring Boot
    SpringframeworkvsSpringBoot:ConclusionAsyouhaveseen,SpringBootisjustawaythateasesdevelopmentofapplicationsbasedonSpringframework.Inotherwords,itcomplementstoSpringframeworkandSpringprojectsdevelopment.Tosummary:Both......
  • Spring是什么?
    什么是Spring我知道你现在可能迫不及待地想要开始编写Spring应用了。我向你保证,在本章结束之前,你肯定能够开发一个简单的Spring应用。但首先,我将使用Spring的一些基础概念为你搭建一个舞台,帮助你理解Spring是如何运转起来的。任何实际的应用程序都是由很多组件组成的,每个组件负责整......
  • 声明式调用 —— SpringCloud OpenFeign
    Feign简介SpringCloudFeign是一个HTTP请求调用的轻量级框架,可以以Java接口注解的方式调用HTTP请求,而不用通过封装HTTP请求报文的方式直接调用Feign通过处理注解,将请求模板化,当实际调用的时候传入参数,根据参数再应用到请求上,进而转化成真正的请求第一个Feign程......
  • Java:Springboot和React中枚举值(数据字典)的使用
    目录1、开发中的需求2、实现效果3、后端代码4、前端代码5、接口数据6、完整代码7、参考文章1、开发中的需求开发和使用过程中,通常会涉及四个角色:数据库管理员、后端开发人员、前端开发人员、浏览者数据库使用int类型的数值进行存储(eg:0、1、2)Java代码使用enum枚举类型的对象进行......
  • Spring缓存框架使用及原理
    使用maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId>......
  • java springboot项目,mybatisplus,import com.baomidou.mybatisplus.core.mapper.BaseMa
    <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.2</version><!--用版本2.1.9就不行,UserMapper里BaseMapper爆红--></dependency>我的结果是,......
  • SpringCloud
    目录Springcloud介绍注册中心(Eureka)背景注册中心案例总结负载均衡(Ribbon)测试使用负载均衡RibbonRibbon负载均衡流程Ribbon的IRule常见负载均衡策略Ribbon的使用方法远程调用(OpenFeign)Feign使用连接池注册中心(Nacos)测试配置集群命名空间Nacos非临时实例配置中心(Nacos)客......