Spring Bean工厂继承关系和源码分析

来源:互联网 发布:淘宝运营助手找不到 编辑:程序博客网 时间:2024/05/22 06:09

Bean工厂继承关系图
这里写图片描述
最上层的接口BeanFactory

package org.springframework.beans.factory;import org.springframework.beans.BeansException;import org.springframework.core.ResolvableType;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;    <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;    boolean containsBean(String name);    boolean isPrototype(String name) throws NoSuchBeanDefinitionException;    boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;    boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;    Class<?> getType(String name) throws NoSuchBeanDefinitionException;    String[] getAliases(String name);}

该接口定义了获取获取Bean的方法。判断是否存在某个Bean。
ListableBeanFactory为可列表的BeanFactory,可以枚举所有的Bean而不是一个一个获取Bean通过Bean name。

public interface ListableBeanFactory extends BeanFactory {    boolean containsBeanDefinition(String beanName);    int getBeanDefinitionCount();    String[] getBeanDefinitionNames();    String[] getBeanNamesForType(ResolvableType type);    String[] getBeanNamesForType(Class<?> type);    String[] getBeanNamesForType(Class<?> type, boolean includeNonSingletons, boolean allowEagerInit);    <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException;    <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit)            throws BeansException;    String[] getBeanNamesForAnnotation(Class<? extends Annotation> annotationType);    Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;    <A extends Annotation> A findAnnotationOnBean(String beanName,   Class<A> annotationType)            throws NoSuchBeanDefinitionException;}

通过上面的方法就能获取到Bean工厂中的Bean
HierarchicalBeanFactory 接口定义了工厂的分层,同样继承了BeanFactory。

BeanFactory getParentBeanFactory(); //获取父工厂boolean containsLocalBean(String name);//根据Bean name判断本地工厂是否存                                       //在Bean
0 0
原创粉丝点击