SpringIOC源码分析(二)__BeanFactory

本文介绍了Spring框架中的核心组件BeanFactory,探讨其基本功能与工作原理,包括如何通过BeanFactory管理Bean实例,以及BeanFactory与ApplicationContext之间的区别。

一、BeanFactory

           BeanFactory是一个接口类提供了最基本的IOC容器的功能,负责管理bean。

beanFactory源码:
package org.springframework.beans.factory;  
import org.springframework.beans.BeansException;  
public interface BeanFactory {  
    String FACTORY_BEAN_PREFIX = "&";          
    Object getBean(String name) throws BeansException;  
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;  
    <T> T getBean(Class<T> requiredType) throws BeansException;  
    Object getBean(String name, Object... args) throws BeansException;  
    boolean containsBean(String name);  
    boolean isSingleton(String name) throws NoSuchBeanDefinitionException;  
    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;  
    boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;  
    Class<?> getType(String name) throws NoSuchBeanDefinitionException;  
    String[] getAliases(String name);  
} 
  • getBean(String) 返回给定名称注册的bean实例,如果singleton模式就返回一个共享实例,否则返回一个新建实例,没有则抛出BeanException
  • T getBean(String,Class) 一个范型方法返回给定名称注册的bean实例,转换为对应的类对象
  • T getBean(Class) 一个范型方法根据类型返回Bean实例
  • containsBean(String)  容器中是否有这个名称的Bean
  • isSingleton(Sting) 这个Bean是否是singleton模式
  • isPrototype(String)  多实例的情况下是否为原型
  • isTypeMatch(String,Class) bean类型是否匹配
  • getType(String) 获取bean类型
  • getAliases(String) 获取bean实例的别名,这些名字都是用户在BeanDefinition中定义的。

beanFactory详解:

  1.             BeanFactory使用延迟加载来注入Bean,只有在使用某个Bean调用这个getBean方法的时候才会加载bean。这样我们就不能发现一些Spring的Bean配置问题。
  2.            ApplicationContext是BeanFactory派生而来的,ApplicationContext而ApplicationContext是容器初始化的时候加载,一次性创建了所有的Bean,启动的时候就可以发现Spring中的配置问题。
  3.            BeanFactory作为一个接口类,没有提供具体的实现,Spring中,DefaultListableBeanFactory,作为一个默认的功能完整的IOC容器使用。
  4.           XmlBeanFactoy继承了DefaultListableBeanFactory功能,实现通过以Xml的方式定义Bean间的依赖关系。
DefaultListableBeanFactory类图


    XmlBeanFactoy Sping3.1后被弃用,取而代之的是ApplicationContext的派生类ClassPathXmlApplication

    同时实现了ApplicationContext和ResourceLoader接口,具备了bean工厂的能力,和xml读取bean定义资源的能力。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值