Spring IOC理解

Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性之一。在传统的Java应用程序中,通常由程序员负责创建对象实例并通过代码直接管理它们之间的依赖关系。而在使用Spring框架时,这种控制权发生了反转:对象的创建和初始化以及它们相互间的依赖关系不再由程序员直接处理,而是交给Spring容器(即IOC容器)来统一管理和维护。

为什么要使用IOC?

代码耦合度太高,我们修改一处代码,往往要修改很多出相关联的代码。

  • 解决方法:我们在创建对象的时候,不自己创建而是由外部提供对象。

  • 引出IOC(控制反转)
    对象的创建权由程序转移到外部,这种思想叫做控制反转。

代码分析

      1. IOC管理的对象  先new一个对象

/**
 * @version 1.0
 * @auther 黄钰涛
 * @since 2024/2/23
 */
public class UserServiceImp implements IUserService{


    @Override
    public void save() {
        System.out.println("这是service的save方法");
    }
}

  2. 告知IOC去管理bean(通过配置文件)

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 注入dao类 -->
    <bean id="daoImp" class="com.ape.dao.UserDaoImp"/>
    <!-- 注入service类 -->
    <bean id="serviceImp" class="com.ape.service.UserServiceImp"/>
    <!-- 注入日期类 -->
    <bean id="date" class="java.util.Date"/>
</beans>

3. 获取IOC容器 (过ApplicationContext接口)

  //加载主配置文件获取IOC容器对象
  ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Beans");

4. 获取bean (参数即配置文件中的id)

 //向spring容器获取javabean
 IUserDao dao = (IUserDao) applicationContext.getBean("daoImp");
 IUserService service = (IUserService) applicationContext.getBean("serviceImp");
 Date date = (Date) applicationContext.getBean("date");

作用

  1. 解耦合

    在传统的编程方式中,对象的创建和管理由应用程序代码直接控制,导致了对象之间的紧密耦合。而通过Spring IoC容器,对象不再自己管理和维护依赖关系,而是由IoC容器负责创建对象、装配依赖关系,从而降低各组件间的耦合度。
  2. 依赖注入

    Spring IoC实现依赖注入(Dependency Injection, DI),即容器在运行时动态地将依赖对象注入到需要它们的对象中。这可以是构造器注入、setter方法注入或字段注入等方式,使得组件间的依赖关系更加清晰和灵活。
  3. 集中式配置与管理

    所有的Bean都在一个统一的IOC容器中进行配置和管理,包括生命周期的控制(如初始化、销毁等)。开发者只需要关注业务逻辑的编写,不需要关心对象的具体实例化过程和资源管理。
  4. 可测试性增强

    由于对象的创建和依赖都是由IoC容器来完成,因此在单元测试中,可以通过Mock对象替换实际依赖项,便于对单个模块进行独立测试。
  5. 扩展性和灵活性

    配置文件(XML或注解)可以在不修改代码的情况下更改对象的依赖关系,方便系统架构的调整和扩展。
  6. 面向切面编程支持

    Spring IoC作为基础,为AOP(Aspect Oriented Programming,面向切面编程)提供了支持,能够更好地分离横切关注点,比如日志记录、事务管理等。

综上所述,Spring IoC通过提供容器和服务定位机制,极大地简化了Java应用的开发和维护工作,促进了松耦合、高内聚的设计原则在实际项目中的落地实施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值