大家好,今天一起学习一下Spring的IOC/DI~
Spring最为人所知的核心特性之一就是IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)。通过这些模式,Spring有效地解决了传统面向对象编程中的紧耦合问题,促进了组件间的解耦,提高了代码的可测试性和灵活性。
IoC/DI 的基本概念
控制反转(IoC)
控制反转是一种设计原则,它描述了对象获取其依赖关系的方式发生了改变。在传统的面向对象编程中,对象通常会自己负责创建或查找其依赖的对象。而在IoC模式下,这种依赖关系被“反转”——不再由对象自身管理,而是由外部容器来负责创建和注入依赖项。这样做的好处是减少了对象之间的直接依赖,增强了系统的松耦合性。
依赖注入(DI)
依赖注入是实现IoC的一种具体方式,它允许开发者以声明式的方式指定对象间的依赖关系,而不是通过硬编码。DI可以通过构造器、Setter方法或字段来完成。这种方式不仅简化了对象的创建过程,还使得代码更容易理解和维护。
Spring IoC容器
BeanFactory vs ApplicationContext
在前面的文章中已经介绍过,Spring提供了两种主要类型的IoC容器:BeanFactory和ApplicationContext。虽然两者都可以用来管理和操作Bean,但它们之间存在一些差异:
- BeanFactory:这是最基础的IoC容器接口,提供了标准的IoC功能。它的优点在于资源消耗较少,适合于资源受限的环境。
- ApplicationContext:它是BeanFactory的子接口,除了继承所有功能外,还增加了对国际化(i18n)、事件传播、资源加载等功能的支持。因此,在大多数情况下,推荐使用ApplicationContext。
// 使用BeanFactory
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("beans.xml"));
MyBean myBean = (MyBean) beanFactory.getBean("myBean");
// 使用ApplicationContext
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean myBean = context.getBean(MyBean.class);
Bean的生命周期管理
Spring IoC容器负责管理Bean的整个生命周期,从实例化到初始化再到销毁。在这个过程中,容器可以调用特定的方法来执行自定义逻辑,比如设置属性值、调用初始化方法或销毁方法等。此外,Spring还支持感知容器的回调接口,如InitializingBean、DisposableBean等,允许Bean在特定阶段执行额外的操作。
public class MyBean implements InitializingBean, DisposableBean {
private String message;
public void setMessage(String message) {

最低0.47元/天 解锁文章
618

被折叠的 条评论
为什么被折叠?



