版本:spring-framework-3.0.5.RELEASE
Spring的最核心的部分就是BeanFactory了,当然我们现在很少直接使用这个类而是通过ApplicationContext来使用了,本篇我们就对BeanFactory接口的核心方法、BeanFactory的子接口及其实现类以及ApplicationContext相关做一个详细的分析和了解。关于实现代码牵扯到的东西太多了,这里只分析接口的功能及继承关系,暂时不做实现类的分析。
一、我们首先看下BeanFactory接口的代码:
- 首先第2行是一个字符串常量,值为"&",这个是用在FactoryBean那部分,假如有一个FactoryBean的name=foo,则使用name=&foo去取bean对象的时候取到的就是foo的工厂而不是foo本身。
- 第4行根据bean的name去查找bean,在当前BeanFactory查找不到的时候会去查找parent的BeanFactory,返回为一个Object对象需用户自行转换其原本的类型。
- 第5行也是根据name查找bean,但是多了一个参数requiredType,查找bean并要求结果符合这个类型,如果requiredType为null,则同上个方法一样只根据name查找,另外这里使用了泛型,返回对象类型会直接是requiredType。
- 第6行是根据requiredType查找bean,查找一个符合这个类型的bean,同样返回类型为requiredType。
- 第7行根据name查找bean,同时有一个参数组args,这个主要是用来给给工厂类创建bean对象的时候调用的,所以如果args不为空则意味着这里查找的是一个prototype的bean。
- 第9-12行分别是几个判断方法:判断是否存在bean;是否是单例bean;是否是prototype的bean,bean是否符合类型requiredType。
- 第13行是根据bean的name获取bean的类型。
- 最后是根据bean的name获取指向该bean的所有别名,如果输入的name本身就是别名,那返回的将包括bean的最初name,并且这个name在返回的数组中第一个元素。
二、现在我们看下BeanFactory的子接口
BeanFactory一共有3个子接口一个实现类,其中实现类SimpleJndiBeanFactory主要是jndi相关,我们这里暂不讨论,下面看3个接口
2.1、HierarchicalBeanFactory接口:主要定义BeanFactory的分层的支撑,所谓分层也就是parentBeanFactory概念
2.1.1、首先看下代码:
2.1.2、这个接口有两个子接口:ApplicationContext和ConfigurableBeanFactory,关于这两个子接口下面独立做分析,因为他们已经不只是HierarchicalBeanFactory的子接口了。
2.2、ListableBeanFactory接口:主要是获取bean的定义和配置信息相关的支撑接口
2.2.1、代码如下:
- containsBeanDefinition()方法判断是否存在指定beanName的定义信息
- getBeanDefinitionCount()获取bean定义的总数
- getBeanDefinitionNames()获取所有bean定义的name数组
- getBeanNamesForType()获取所有指定类型的bean的name数组
- 第2个getBeanNamesForType()方法多了两个参数,可以指定是否包含单例,是否渴望初始化
- 两个getBeansOfType()和getBeanNamesForType()的参数一样,只不过这个返回的是name为key,bean对象为value的map集合
- getBeansWithAnnotation()方法获取包含指定注解annotationType所有bean的map集合
- 最后findAnnotationOnBean()方法获取指定beanName的指定注解的注解信息对象
2.1.2、这个接口有两个子接口:ApplicationContext和ConfigurableListableBeanFactory,关于这两个子接口同样放到下面独立做分析。
注:该接口还有一个静态实现类StaticListableBeanFactory,没发现哪里在使用,代码上也很简单就是把bean的定义放到一个map集合beans里面,实现一个基本的本接口功能,暂不做分析。
2.3、AutowireCapableBeanFactory接口:主要是spring的自动装配相关功能支撑接口
2.3.1、代码如下:
这个接口的主要实现代码都在AbstractAutowireCapableBeanFactory类中,暂时也没有发现其他地方用到这个接口,查看这些方法的实现可以去看这个类。
- 首先是5个常量代表自动装配的类型:不自动装配、按name、按类型、根据自省完全自动装配(不推荐,已在3.0中过时)。
- 两个创建Bean的方法,一个是根据类型,另外一个多了两个参数自动装配类型和是否检查依赖
- configureBean()是一个用来主动的配置装配的,就是在需要的时候把existingBean自动装配给beanName对应的bean
- initializeBean()是bean的初始化方法在这里主要调用了几个工厂级回调(BeanNameAware、BeanClassLoaderAware和BeanFactoryAware),并处理了所有BeanPostProcessor的两个调用
- autowire()方法创建一个类型为beanClass的bean对象,并根据自动装配类型autowireMode进行自动装配,dependencyCheck则代表是否做依赖检查
- autowireBean()方法暂时没有很清楚,只知道和普通的按name按类型装配不同,和注解相关,以后分析清楚了再补充。
- autowireBeanProperties方法()和上面的方法类似,只不过省略了bean创建的步骤,直接穿入一个bean对象进行自动装配
- applyBeanPropertyValues()应用bean定义中明确定义的属性值,区别于autowireBeanProperties(会装配所有属性)。
- applyBeanPostProcessorsBeforeInitialization()和applyBeanPostProcessorsAfterInitialization()两个方法处理BeanPostProcessor的两种回调,上面的initializeBean()方法的实现中就是调用这两个
- 两个resolveDependency()方法也没有搞清楚,是跟bean的依赖相关的,以后清楚了再补充。
2.3.2、这个接口的继承结构也很清晰,一个子接口ConfigurableListableBeanFactory,一个实现类AbstractAutowireCapableBeanFactory。
转自http://www.sandzhang.com/
相关推荐
在Spring框架中,BeanFactory和ApplicationContext是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入掌握Spring框架至关重要。 首先,BeanFactory是Spring中最基本的bean容器,它提供了对...
在Spring框架中,ApplicationContext和BeanFactory是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入学习和使用Spring至关重要。 首先,BeanFactory是Spring中最基础的bean管理容器,它...
在Spring中,典型的获取ApplicationContext对象的方式是使用ApplicationContext接口的一个实现类,如ClassPathXmlApplicationContext。这是一个根据给定XML文件的类路径的上下文实现。通常我们会在初始化Spring IoC...
在Java世界中,Spring框架是应用最广泛的IoC(Inversion of Control)和DI(Dependency Injection)容器之一。本文将通过模拟Spring的`BeanFactory`来深入理解其工作原理,帮助开发者更好地掌握Spring的核心概念。 ...
ApplicationContext通过实现BeanFactory接口,不仅能够初始化和管理Bean,还能够处理事件、国际化的消息、资源加载等。 1. **配置加载**: ApplicationContext可以从XML文件、Java配置类或者@ComponentScan注解中...
Spring的IoC容器是其核心特性之一,它通过BeanFactory和ApplicationContext两个主要接口来实现控制反转(Inversion of Control,IoC)的概念。BeanFactory作为基础的IoC容器,提供了全面的IoC服务,包括对象的注册、...
在Spring框架中,BeanFactory和FactoryBean是两个重要的接口,它们各自扮演着不同的角色,但都与Spring容器的管理和创建对象密切相关。 **BeanFactory接口**是Spring容器的基础,它是整个Spring IoC(Inversion of ...
BeanFactory是Spring的核心组件之一,它是容器的基石,负责管理应用中的对象,实现依赖注入。这篇文章将深入探讨BeanFactory的工作原理及其相关知识点。 一、BeanFactory的定义 BeanFactory是一个接口,它定义了...
在Java的Spring框架中,`BeanFactory`和`ApplicationContext`是两个非常重要的核心概念,它们是IoC(Inversion of Control,控制反转)容器的实现,用于管理应用程序中的对象和依赖关系。理解这两个容器的区别和用途...
Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的核心接口,它定义了getBean()、containsBean()等管理...
在Spring框架中,`ApplicationContext`是一个非常重要的接口,它提供了加载和管理Bean定义,以及获取Bean实例的功能。本文将深入探讨如何在Spring中获取`ApplicationContext`的公用方法,并结合提供的两个文件名`...
Spring的IoC容器通过BeanFactory和ApplicationContext接口实现。BeanFactory是核心接口,负责管理和实例化bean,而ApplicationContext在BeanFactory之上增加了更多的企业级服务,更适合复杂的应用程序环境。 在...
BeanFactory接口是Spring的核心,它定义了一系列方法来管理和控制Bean的生命周期。接口中的`getBean`方法是最核心的,它允许我们根据Bean的名称或类型获取Bean实例。例如: ```java // 根据名称获取Bean Object ...
Spring框架的核心在于其IoC容器,通过BeanFactory和ApplicationContext接口提供了强大的依赖注入功能。开发者可以根据项目的需要选择合适的容器类型和配置方式,以实现高效、可维护的代码结构。随着Spring框架的发展...
1. 核心容器:主要包括BeanFactory和ApplicationContext两个接口,它们是Spring框架的核心,负责实例化、配置和管理应用程序中的对象。其中BeanFactory提供了基础的依赖注入支持,而ApplicationContext是BeanFactory...
在Java Web开发中,BeanFactory是Spring框架的核心组件之一,它是工厂模式的一种实现,主要用于管理对象(也称为bean)的创建、配置和依赖注入。面向接口编程是一种编程范式,鼓励开发者通过接口来定义功能,而不是...
首先,BeanFactory是一个接口,它是所有Spring IoC(Inversion of Control,控制反转)容器的基础。它提供了加载bean定义、获取bean实例和维护bean之间依赖关系的能力。在Spring框架中,实现BeanFactory接口的主要类...
在实际使用中,Spring通常使用ApplicationContext接口,它扩展了BeanFactory并提供了额外的功能,如事件发布、消息源支持和国际化。ApplicationContext通常是从XML文件、Java配置类或注解中加载Bean定义的。 理解...
- 核心容器:核心容器包括Spring的核心功能,即BeanFactory和ApplicationContext两个核心接口。这些接口负责配置、管理对象的创建、装配和生命周期管理。 - 数据访问/集成:该模块提供了对数据访问技术的支持,包括...
通过本章的学习,我们深入了解了Spring框架中控制反转(IoC)的概念及其核心组件——BeanFactory和ApplicationContext。理解这些基础知识对于熟练掌握Spring框架至关重要。在实际项目开发中,合理选择和利用Spring的...