一、spring框架。
(1)spring框架?
- 框架是一种结构体。它具备通用性,且能快速实现产品的功能的特点。
- 例子:建筑框架、写作文的文章结构框架等。
(2)spring-IOC思想?
1、基本介绍。
- spring-IOC(控制反转)是一种设计思想。
- 它的核心在于将对象的创建和管理权从应用程序代码中剥离出来,转而由外部容器(如Spring框架)来负责创建。这样不就是将对象的控制权转换到第三方处理!
- 这样做的好处:降低代码之间的耦合度(低耦合)、提高代码的可维护性和可扩展性。
2、核心概念?
控制权的转移(反转)。
在传统的编程模式中,对象的创建和依赖关系的管理是由程序代码直接控制的。
而在IOC思想的模式下,这种控制权被反转。由外部容器来管理对象的生命周期(包括对象的创建、配置、销毁等)。
依赖注入(DI)。
依赖注入是实现IOC的一种方式。
它涉及到将对象的依赖关系(如其他对象的引用)通过构造函数、setXXX()方法等方式注入到对象中,而不是在对象内部直接创建依赖对象。
容器。
Spring框架中的IOC容器是一个管理对象生命周期和依赖关系的系统。
它负责创建对象、配置对象、管理对象之间的依赖关系。并在对象不再需要时销毁它们。这点很重要!
3、实现方式
- 在spring框架中,IOC的实现主要依赖于配置文件(POM文件、spring的XML配置文件或注解)和IOC容器。
- spring.xml配置文件管理bean对象的创建、以及bean对象间的依赖关系。
- pom文件主要是对整个Maven项目的依赖管理与模块化管理。
- IOC容器主要是拿取Bean工厂创建的对象并管理对象间依赖关系。
- 开发者可以通过配置文件声明对象及其依赖关系,然后由Spring容器在运行时创建和管理这些对象。
二、spring中的Bean工厂与IOC容器。
- spring容器是spring框架的核心。
- spring容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。
- spring容器使用依赖注入(DI)来管理对象间的依赖然后组成一个应用程序的组件。
- springIOC容器利用Java的POJO类和配置元数据来生成完全配置和可执行的系统或应用程序。
- IOC容器具有依赖注入功能的容器。它可以创建对象,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
- 通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。
spring入门的第一个案例中,使用ClassPathXmlApplicationContext来创建容器对象。通过右键查看图片查看其继承树!
ClassPathXmlApplicationContext(ApplicationContext)容器底层就是继承BeanFactory。
spring提供了以下两种不同类型的容器。
(1)Bean工厂。
1、基本介绍。
- 在spring框架中,Bean工厂(BeanFactory)是IOC容器的早期实现。
- 它提供了基本的依赖注入功能。Bean工厂是spring框架的核心,负责实例化、配置和组装对象。这些对象被称为"beans",它们由spring容器管理。
2、核心功能。
实例化Bean:Bean工厂负责创建Bean实例。这是IoC容器最基本的功能。
配置Bean:Bean工厂可以读取配置元数据(如XML配置文件或注解)。并根据这些配置来设置Bean的属性。
管理Bean的生命周期:Bean工厂管理Bean的整个生命周期。包括创建、初始化、使用和销毁。
依赖注入(DI):Bean工厂通过依赖注入来组装Bean,即将一个Bean的依赖关系注入到另一个Bean中。
单例和原型:Bean工厂支持单例(Singleton)和原型(Prototype)两种作用域。
单例模式的每个由容器管理的Bean有且仅有一个实例。而原型模式则每次请求都会创建一个新的Bean实例。
其中SingletonObjects可以通过执行IOC容器实例化对象时设置断点debug模式查看具体情况。
(2)IOC容器(ApplicationContext)。
- ApplicationContext是IOC容器的更高级实现,它继承了BeanFactory的所有功能,并添加了更多企业级的功能。ApplicationContext提供了一个更加丰富的框架支持,包括国际化消息、事件传播、资源访问等。
ApplicationContext的多实现。例如本篇博客的ApplicationContext实例化对象就是使用ClassPathXmlApplicationContext对象。比BeanFactory的代码书写步骤简单很多,因为底层封装了很多。
ApplicationContext支持多种配置方式,包括XML、注解、Java配置等。
由于ApplicationContext提供了比BeanFactor更多的功能。因此在大多数Spring应用程序中,推荐使用ApplicationContext作为IOC容器。
总的来说,ApplicationContext是Spring框架中功能更全面、更强大的IoC容器。适用于大多数Spring应用程序。
三、ApplicationContext与BeanFactory实例化对象的流程与区别。
项目演示(ApplicationContext与BeanFactory)实例化对象准备。
(1)ApplicationContext接口。
- 其他明天补充。
- 暂时展示部分代码与方法。
(2)BeanFactory接口。
其他明天补充。
暂时展示部分代码与方法。
(3)spring实例化对象总流程图解。
- 虽然它们之间的实现方式有不同之处,且创建bean对象的时机不同。
- 但是最终的目的都是:解析spring的配置文件(springConfig.xml)中的<bean>标签。
- 利用Java的特性("万事万物皆对象")将每一个<bean>标签对应的bean对象封装成"BeanDefinition"类对象,再存储每一个对象"模板",以hashMap的底层(键值对)的方式存储起来。
- 再通过循环遍历将每一个"bean"存放到前面讲的SingletonObjects中(它的底层也是hashMap(键值对))存储起来。
- 最后当BeanFactory(Bean工厂)或者ApplicationContext容器去获取实例化对象时,以getBean()方法通过键名拿取到对应的值(实例化对象)。这也就完成了spring-IOC容器的对象的创建与依赖注入。
- beanDefinitionMap。依赖BeanDifinition类封装每一个bean对象。
- singletonObjects。单例模式下的对象。