您现在的位置是:首页 >技术交流 >Spring-重新认识IoC一网站首页技术交流
Spring-重新认识IoC一
简介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注入更直观和易于理解。 | - 通常比构造器注入更灵活。- 更容易理解和实现。 |
缺点 | - 可能会导致代码耦合度增加。- 可能限制对象的灵活性。 | - 可能会导致代码耦合度增加。- 可能使对象的构造函数变得复杂。 |
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。