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注入更直观和易于理解。- 通常比构造器注入更灵活。- 更容易理解和实现。
缺点- 可能会导致代码耦合度增加。- 可能限制对象的灵活性。- 可能会导致代码耦合度增加。- 可能使对象的构造函数变得复杂。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值