BeanFactory体系结构 (3)

ConfigurableListableBeanFactory接口继承自ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory。大多数具有列出能力的bean工厂都应该实现此接口。此了这些接口的能力之外,该接口还提供了分析、修改bean的定义和单例的预先实例化的机制。这个接口不应该用于一般的客户端代码中,应该仅仅提供给内部框架使用。下面是这个接口的方法:

// 忽略用于自动装配的依赖的类型 void ignoreDependencyType(Class<?> type); // 忽略用于自动装配的依赖的接口 void ignoreDependencyInterface(Class<?> ifc); // 给特定的依赖类型注册自动装配的值 void registerResolvableDependency(Class<?> dependencyType, @Nullable Object autowiredValue); // 指定的bean是否为自动装配的候选者 boolean isAutowireCandidate(String beanName, DependencyDescriptor descriptor) throws NoSuchBeanDefinitionException; // 获取bean的定义 BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException; // 获取这个工厂中的所有bean的名字的迭代器 Iterator<String> getBeanNamesIterator(); // 清除元数据缓存 void clearMetadataCache(); // 冻结所有bean的定义 void freezeConfiguration(); // 工厂中bean的定义是否冻结了 boolean isConfigurationFrozen(); // 对非懒加载的单例进行预先初始化 void preInstantiateSingletons() throws BeansException; AbstractBeanFactory

AbstractBeanFactory继承自FactoryBeanRegistrySupport,实现了ConfigurableBeanFactory接口。AbstractBeanFactory是BeanFactory的抽象基础类实现,提供了完整的ConfigurableBeanFactory的能力。在这里不讨论该抽象类的实现细节,只要知道这个类是干什么的就行了,会面会有更加详细的章节来讨论。

单例缓存

别名的管理

FactoryBean的处理

用于子bean定义的bean的合并

bean的摧毁接口

自定义的摧毁方法

BeanFactory的继承管理

子类需要实现的模板方法如下:

// 是否包含给定名字的bean的定义 protected abstract boolean containsBeanDefinition(String beanName); // 根据bean的名字来获取bean的定义,子类通常要实现缓存 protected abstract BeanDefinition getBeanDefinition(String beanName) throws BeansException; // 为给定的已经合并了的bean的定义创建bean的实例 protected abstract Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException; AbstractAutowireCapableBeanFactory

AbstractAutowireCapableBeanFactory继承自AbstractBeanFactory,实现了AutowireCapableBeanFactory接口。该抽象了实现了默认的bean的创建。

提供了bean的创建、属性填充、装配和初始化

处理运行时bean的引用,解析管理的集合、调用初始化方法等

支持构造器自动装配,根据类型来对属性进行装配,根据名字来对属性进行装配

子类需要自行实现的模板方法如下:

// 用于根据类型来进行自动装配 Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName, @Nullable Set<String> autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException; DefaultListableBeanFactory

DefaultListableBeanFactory继承自AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable接口。这个类是一个非常完全的BeanFactory,基于bean的定义元数据,通过后置处理器来提供可扩展性。

XmlBeanFactory

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppjdx.html