Spring源码(2)-Spring中的容器BeanFactory

Spring规定所有的IOC容器都必须实现BeanFactory接口,
BeanFactory是一个顶级的容器接口。

BeanFactory

BeanFactory里有一个特殊的属性,String FACTORY_BEAN_PREFIX = "&";
在这里插入图片描述
这个用来获取FactoryBean本身的实例。注意FactoryBean和BeanFactory是完全不一样的两个东西 。
BeanFactory是容器的顶级 接口,定义了Bean工厂的一些操作方法。比如根据名字获取实例,根据类型获取实例==。
在这里插入图片描述
而FactoryBean也是一个接口,实现该接口的类实现 getObject方法来 生成一个Bean.工厂类也是一个类,他的作用是用来生成我们需要的其他的类,而不是注入到其他地方。
Spring在初始化的时候,会把这个接口的实现类给取出来,调用getObject来生成我们想要的Bean.
例子 :

public class UserFactoryBean implements FactoryBean<User> {

    @Override
    public User getObject() throws Exception {
        return new User();
    }

    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
}

    <bean class="com.fuyouj.model.factory.UserFactoryBean" id="userFactoryBean"></bean>

在这里插入图片描述
在这里插入图片描述
可以看到,使用了转义字符的名称获取到的是工程类的本身。

BeanFactory的继承体系

在这里插入图片描述

ListableBeanFactory

在这里插入图片描述
正如该接口的名字表达的意思,该接口定义了一列表的形式提供Bean的相关信息,这个接口最大的特点就是可以批量列出工长生产的实例信息 。
在这里插入图片描述
方法getBeanDefinitionCount获取该容器内注册的Bean的总数,getBeanDefinitionNames获取BeanDefinition名字的集合==。

HierarchicalBeanFactory

在这里插入图片描述
此接口使得容器具备层次的关系
在这里插入图片描述
简单的两个方法,一个是返回本工厂的父工厂,一个是在本层级内查找是否有某个Bean.
实现了本 接口的容器可以在应用中起多个BeanFactory,并且可以设置父子关系关联起来。这样子就可以很好地适配三层架构,比如可以 让A容器管理控制层的Bean,B容器管理业务层的Bean.然后通过层级关系关联起来。

AutowireCapableBeanFactory

在这里插入图片描述
赋予了容器具备自动装配Bean的能力(自动满足Bean之间的依赖)

里面定义了5种常量,在这里插入图片描述
我们使用的最多的就是现成的@Autowired标签,该注解最终注入的方式是通过 resolveDependency来实现的依赖注入。而该接口里面定义的5中常量对应着我们日常使用注入的几种方式。
在这里插入图片描述

DefaultListableBeanFactory

在这里插入图片描述
DefaultListableBeanFactory是真正第一个可以独立运行的IOC容器
在这里插入图片描述
实现了BeanDefinitionRegistry接口,顾名思义,可以注册BeanDefinition.
在本类中,有一个醒目的成员变量。BeanDefinitionMap,存放的是本容器内BeanDefinition
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值