您现在的位置是:首页 >技术交流 >Spring-重新认识IoC一网站首页技术交流

Spring-重新认识IoC一

码农界的菜鸟 2024-06-17 11:28:30
简介Spring-重新认识IoC一


什么是IoC

  控制反转,将对象创建、配置和管理的责任从应用程序代码中转移到了Spring容器。通过使用IoC,应用程序不再负责创建和管理对象,而是由Spring容器负责这些任务。这样可以减少代码中的硬编码依赖关系,提高代码的灵活性和可维护性。
  举个例子说明,我们原来需要一个对象的时候,大部分都是“new”一个对象,而在Spring中,我们将“new”的这个操作交给Spring容器,通过注解或者配置文件的方式告诉Spring需要“new”哪些类(当然,spring并不是真的去“new”一个对象,而是通过反射构造一个对象),我们在使用的时候只需要将Spring “new”好的一个对象拿过来用就行。

IoC的主要实现策略

  • 服务定位模式(Service Location Pattern)
    • 一般来说就是JNDI技术获取一些JavaEE的组件,比如EJB组件和DataSource这样的组件。
  • 依赖注入(DI)
    • 构造器注入(Constructor Injection):通过构造函数将依赖项注入到对象中。这是最常见的IoC策略,也是最直接的。
    • Setter方法注入(Setter Injection):通过Setter方法将依赖项注入到对象中。这种方式比构造函数注入更灵活,因为它允许将依赖项注入到任意的setter方法中。
    • 字段注入(Field Injection):通过直接将依赖项注入到类的字段中来实现。这种方式通常不建议使用,因为它破坏了类的封装性,可能导致意外的行为和难以维护的代码。
    • 接口注入(Interface Injection):通过接口将依赖项注入到实现该接口的对象中。这种方式可以实现多个实现类之间的解耦,但需要在实现类和接口之间进行强制转换。
    • 基于注解的配置(Annotation-based Configuration):通过使用注解来配置Bean实例及其依赖关系。这种方式使得配置更加简洁、灵活,并且支持AOP(Aspect-Oriented Programming,面向切面编程)。
    • XML配置文件(XML Configuration):通过XML文件来配置Bean实例及其依赖关系。这种方式是传统的IoC配置方式,具有可读性和可扩展性的优点,但相对复杂。
  • 依赖查找
    • 容器提供回调给组件和查找上下文。这是EJB和Apache Avalon的方法。它将责任留给每个组件使用容器API来查找资源和协作者。控制反转的限制仅限于容器调用回调方法,应用程序代码可以使用这些方法获取资源。

IoC容器的职责

  • 依赖处理
    • 依赖查找
    • 依赖注入
  • 生命周期管理
    • 容器
    • 托管的资源(Java Beans 或其他资源)
  • 配置
    • 容器
    • 外部化配置
    • 托管的资源(Java Beans 或其他资源)

依赖查找和依赖注入

类型依赖处理实现便利性代码侵入性API 依赖性可读性
依赖查找主动获取相对繁琐侵入业务逻辑依赖容器API 良好
依赖注入被动提供相对便利低侵入性不依赖容器API 一般

构造器注入和Setter注入

类型构造器注入Setter注入
优点- 可以确保在创建对象时正确地注入所有必要的依赖项。- 通常比Setter注入更直观和易于理解。- 通常比构造器注入更灵活。- 更容易理解和实现。
缺点- 可能会导致代码耦合度增加。- 可能限制对象的灵活性。- 可能会导致代码耦合度增加。- 可能使对象的构造函数变得复杂。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。