Spring框架深度解析:IOC容器与依赖注入

需积分: 7 0 下载量 135 浏览量 更新于2024-08-05 收藏 35KB MD 举报
"Spring学习笔记" Spring是一个自2003年起流行的Java框架,它主要由两个核心概念构成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。本笔记主要关注Spring的IOC容器及其相关特性。 ### 一、什么是IOC容器? IOC,即控制反转,它反转了传统对象创建和依赖关系建立的过程。在没有Spring的情况下,开发者通常需要手动创建对象并管理它们之间的依赖。但在Spring中,这些工作交给了IOC容器,它像哆啦A梦的百宝箱一样,负责管理和创建Bean对象。IOC的核心是DI(Dependency Injection,依赖注入),这是一种设计模式,使得组件之间的依赖关系不再硬编码,而是通过外部容器来注入,增强了代码的可测试性和可维护性。 ### 二、Spring框架中IOC容器创建对象的三种方式 1. **<bean>标签**:使用无参构造方法创建对象,Spring容器根据配置文件中的定义自动调用无参构造器创建Bean。 2. **静态工厂**:通过指定`factory-method`和`class`,容器将调用指定类的静态工厂方法来创建对象。 3. **非静态实例工厂**:利用`factory-bean`和`factory-method`,容器会先创建一个工厂实例,然后调用该实例的指定方法来创建Bean。 ### 三、Bean元素的常见属性 - `id`: Bean在IOC容器中的唯一标识。 - `class`: 指定Bean的类类型。 - `scope`: 定义Bean的作用域,包括: - `singleton`:默认的单一实例,容器启动时创建一个对象,后续所有请求都返回同一对象。 - `prototype`:原型,每次请求都会创建新的对象。 - `request`:每个HTTP请求创建一个新实例。 - `session`:整个HTTP会话期间一个实例。 - `global-session`:全局会话共享一个实例。 - `lazy-init`:标记Bean是否延迟加载,`true`表示首次获取Bean时才创建。 - `init-method`:初始化Bean时执行的方法。 - `destroy-method`:销毁Bean时执行的方法。 ### 四、Bean的声明周期 Bean的生命周期包括四个阶段:Bean的定义、初始化、使用和销毁。Spring提供多种扩展点来控制Bean的生命周期,如初始化回调、销毁回调,以及通过实现接口或使用注解自定义生命周期。 ### 五、如何进行依赖注入(DI) DI允许我们不直接在代码中创建依赖对象,而是通过容器来注入。有以下两种主要方式: 1. **属性注入**:通过setter方法设置Bean的属性值,可以是基本类型、复杂类型(如数组、集合)或者引用类型。 2. **构造器注入**:通过构造函数传入依赖对象,适用于不可变对象或者需要在构造时就确定依赖的情况。 依赖注入可以减少代码间的耦合,提高代码的灵活性和可测试性。 总结来说,Spring的IOC容器通过管理Bean的创建、依赖注入以及生命周期,实现了对对象的控制反转,降低了组件之间的耦合,提高了系统的可维护性和可扩展性。学习和理解Spring的IOC容器,对于任何Java开发者来说,都是非常重要的一步。