找回密码
 立即注册
首页 业界区 业界 以接口肢解bean factory,源码没那么神秘

以接口肢解bean factory,源码没那么神秘

谧怏弦 2025-6-29 19:28:21
本来昨天在看 spring frame的八股, 看到了IOC部分,但是实在看不懂是什么东西,讲是讲源码部分,但又不完全讲,我想着那我要不自己看一下源码
这是我画的Bean Factory的大致关系图
1.png

删去了bean别名管理接口(AliasRegistry)和bean定义接口(BeanDefinitionRegistry)避免复杂理解
BeanFactory有三个子类ListableBeanFactory ,HierarchicalBeanFactory,ConfigurableBeanFactory ,AutowireCapableBeanFactory 。
我们先来看看BeanFactory 只实现了IOC 容器的基本行为规范,好比是让需求方提出对目标的需求。
  1. public interface BeanFactory {
  2. //与FactoryBean创建的bean区分开来, 若命名的bean是FactoryBean,
  3. //则获取将返回Factory,而不是Factory返回的实例。
  4.     String FACTORY_BEAN_PREFIX = "&";
  5.     Object getBean(String var1) throws BeansException;
  6.     <T> T getBean(String var1, Class<T> var2) throws BeansException;
  7.     Object getBean(String var1, Object... var2) throws BeansException;
  8.     <T> T getBean(Class<T> var1) throws BeansException;
  9.     <T> T getBean(Class<T> var1, Object... var2) throws BeansException;
  10.     <T> ObjectProvider<T> getBeanProvider(Class<T> var1);
  11.     <T> ObjectProvider<T> getBeanProvider(ResolvableType var1);
  12.     boolean containsBean(String var1);
  13.     boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
  14.     boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
  15.     boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;
  16.     boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
  17.     @Nullable
  18.     Class<?> getType(String var1) throws NoSuchBeanDefinitionException;
  19.     @Nullable
  20.     Class<?> getType(String var1, boolean var2) throws NoSuchBeanDefinitionException;
  21.     String[] getAliases(String var1);
  22. }
复制代码
ListableBeanFactory 定义了Factory Bean的可枚举性,适用于批量操作 bean 的场景
  1. public interface ListableBeanFactory extends BeanFactory {
  2.     boolean containsBeanDefinition(String var1);
  3.     int getBeanDefinitionCount();
  4.     String[] getBeanDefinitionNames();
  5.     <T> ObjectProvider<T> getBeanProvider(Class<T> var1, boolean var2);
  6.     <T> ObjectProvider<T> getBeanProvider(ResolvableType var1, boolean var2);
  7.     String[] getBeanNamesForType(ResolvableType var1);
  8.     String[] getBeanNamesForType(ResolvableType var1, boolean var2, boolean var3);
  9.     String[] getBeanNamesForType(@Nullable Class<?> var1);
  10.     String[] getBeanNamesForType(@Nullable Class<?> var1, boolean var2, boolean var3);
  11.     <T> Map<String, T> getBeansOfType(@Nullable Class<T> var1) throws BeansException;
  12.     <T> Map<String, T> getBeansOfType(@Nullable Class<T> var1, boolean var2, boolean var3) throws BeansException;
  13.     String[] getBeanNamesForAnnotation(Class<? extends Annotation> var1);
  14.     Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> var1) throws BeansException;
  15.     @Nullable
  16.      A findAnnotationOnBean(String var1, Class var2) throws NoSuchBeanDefinitionException;
  17.     @Nullable
  18.      A findAnnotationOnBean(String var1, Class var2, boolean var3) throws NoSuchBeanDefinitionException;
  19. }
复制代码
看完了这些接口类和接口方法,对IOC容器有了更扩展一些的理解
其实源码还是挺容易看的,先通过一个类向上找到基类,再往下看详细的接口类,实现类。 对其有一个全局的理解

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册