目录

概述

接口方法

BeanFactory重要的子类


概述

BeanFactory是容器的顶层接口,也是spring最核心的容器,管理bean的核心方法都在BeanFactory接口中定义。像ApplicationContext接口,ConfigurableApplicationContext接口都间接继承BeanFactory接口,既ApplicationContext调用getBean()方法都是BeanFactory提供的。

接口方法

获取bean的重载方法▼

    Object getBean(String var1) throws BeansException;<T> T getBean(String var1, Class<T> var2) throws BeansException;Object getBean(String var1, Object... var2) throws BeansException;<T> T getBean(Class<T> var1) throws BeansException;<T> T getBean(Class<T> var1, Object... var2) throws BeansException;

获取bean的ObjectProvider▼

    <T> ObjectProvider<T> getBeanProvider(Class<T> var1);<T> ObjectProvider<T> getBeanProvider(ResolvableType var1);

是否含有bean,按照bean的名称或别名查找▼ 

boolean containsBean(String var1);

是否是单例作用域▼

boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;

是否是原型作用域▼

boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;

检查具有给定信息的Bean是否与指定的类型匹配。更具体地说,检查对给定名称的getBean调用是否将返回可分配给指定目标类型的对象。将别名转换回相应的规范bean名称。将询问父工厂是否在该工厂实例中找不到该bean。▼

boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;

获取bean对应的class▼

@Nullable
Class<?> getType(String var1) throws NoSuchBeanDefinitionException;
@Nullable
Class<?> getType(String var1, boolean var2) throws NoSuchBeanDefinitionException;

获取bean所有的别名▼

String[] getAliases(String var1);

BeanFactory重要的子类

DefaultListableBeanFactory

DefaultListableBeanFactory是一个成熟的,可以独立使用的容器。是整个bean加载的核心,也是spring注册及加载bean的默认实现。如上uml图所示拥有以下能力

  • AliasRegistry:AliasRegistry是制定别名的管理规则,定义了对alias的简单的简单增改删等操作。
  • SimpleAlliasRegistry:主要是用map作为alias的缓存,并对接口AliasRegistry进行实现。
  • SingletonBeanRegistry:定义对单例的注册及获取。
  • BeanFactory:定义获取bean及bean的各种属性
  • DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现。
  • HierarchicalBeanFactory:继承BeanFactory,也就是在BeanFactory的基础上定义了对parentFactory的支持。
  • BeanDefinitionRegistry:定义对BeanDefinition的各种增改删操作。BeanDefinition中定义的属性有诸如类名、sccope、属性、构造函数参数列表、依赖的bean、是否单例类、是否懒加载等,其实就是将Bean的定义信息存储到这个BeanDefinition相应的属性中,之后对Bean的操作就是直接对BeanDefinition进行的。
  • FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理功能。
  • ConfigurableBeanFactory:提供配置Factory的各种方法。
  • ListableBeanFactory:根据各种条件获得bean的配置清单。
  • AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。
  • AutowireCapableBeanFactory:提供创建bean自动注入,初始化以及应用bean的后置处理器
  • AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory并对接口Autowire,CapableBeanFactory进行实现。
  • ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型及接口等。

DefaultListableBeanFactory也缺少一些能力,比如有如下配置类

@Configuration
public class Config {@Beanpublic Bean1 bean1() { return new Bean1(); }@Bean public Bean2 bean2() {return new Bean2();}
}

当注册Config配置bean的时候,Bean1核Bean2并不能注入到DefaultListableBeanFactory中去,此时需要BeanFactory的后置处理器去完成对Bean1和Bean2这些带有@Bean注解bean注册功能。spring内置后置处理器有如下5个

//BeanFactory后置处理器
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
//Bean后置处理器
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
//Bean后置处理器
org.springframework.context.annotation.internalCommonAnnotationProcessor
//BeanFactory后置处理器
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory

使用internalConfiguratibmAnnotationProcessor后置处理可以做到解析并注册@Configuration配置类中的bean的能力,再使用internalAutowiredAnnotationProcessor的Bean后置处理器增加对注解@Autowired的解析能力,使用internalCommonAnnotationProcessor的Bean后置处理器增加对注解@Resource的解析能力,使得Bean1拥有Bean2的依赖注入

ApplicationContext

除了继承BeanFactory的功能外ApplictionContext拥有以下能力

  • messageScore:国际化资源处理能力

通过读取自己配置的properties文件从而得到国际化信息,调用getMessage()方法得到具                 体的国际化描述信息

  • ResourcePatternResolver:通配符匹配资源能力

[calsspath:]是去类路径下边去找propertres,如果想去jar包中去找要写成                  [classpath*:META-INFO...]

Resource[] rescue = getResource("calsspath:application.propertres");
  • ApplicationEventPublisher:发布事件对象
publishEvent();
  • EnvironmentCapable:处理环境信息的能力

可以获取环境变量也可以获取prepertres文件中的键值对

getEnvironment().getProperty("java_home");
getEnvironment().getProperty("server.port");

ApplicationContext接口典型的实现有如下几个

ClassPathXmlApplicationContext

读取类路径下的*.xml文件进行bean注入

FileSystemXmlApplicationContext

读取文件路径的*.xml文件进行bean注入

ConfigurableApplicationContext

此接口结合了所有ApplicationContext需要实现的接口。因此大多数的ApplicationContext都要实现此接口。它在ApplicationContext的基础上增加了一系列配置应用上下文的功能。配置应用上下文和控制应用上下文生命周期的方法在此接口中被封装起来,以免客户端程序直接使用。

AnnotationConfigApplicationContext

较为实用的,基于注解实现的容器,将配置类作为参数传入该容器的构造参数中进行bean的注入。创建AnnotationConfigApplicationContext后,5个内置的后置处理器会自动加到容器中去,可以直接使用

AnnotationConfigServletWebApplicationContext

与AnnotationConfigApplicationContext类似,增加支持web环境的能力

GenericApplicationContext

GenericApplicationContext通用应用程序上下文实现,该实现内部有一个 DefaultListableBeanFactory 实例。可以采用混合方式处理bean的定义,而不是采用特定的bean定义方式来创建bean。

GenericApplicationContext基本就是对DefaultListableBeanFactory 做了个简易的封装,几乎所有方法都是使用了DefaultListableBeanFactory的方法去实现。

GenericApplicationContext没有添加默认的后置处理器,如果需要进行操作如配置类的bean注入,bean的依赖注入还是需要自行添加后置处理器

BeanFactory接口相关推荐

  1. Spring源码解析 - BeanFactory接口体系解读

    不知道为什么看着Spring的源码,感触最深的是Spring对概念的抽象,所以我就先学接口了. BeanFactory是Spring IOC实现的基础,这边定义了一系列的接口,我们通过这些接口的学习, ...

  2. 被问懵了,BeanFactory和FactoryBean接口的区别到底是什么?

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 作者:ゞ .邓澎波 cnbl ...

  3. SSM 整合 4:Spring IoC 容器基于的两个重要接口 BeanFactory 和 ApplicationContext

    文章目录 前言 一.BeanFactory 接口 1.1.加载 Spring 配置文件创建 BeanFactory 接口实例 1.2.开发中的运用以及使用说明 二.ApplicationContext ...

  4. BeanFactory和ApplicationContext接口的联系和区别

    使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org ...

  5. Spring源码解析 - AbstractBeanFactory 实现接口与父类分析

    2019独角兽企业重金招聘Python工程师标准>>> 我们先来看类图吧: 除了BeanFactory这一支的接口,AbstractBeanFactory主要实现了AliasRegi ...

  6. 还不知道BeanFactory和ApplicationContext的区别?

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转载自公众号:日拱一兵 关注我,回复口令获取可获取独家整理的学习资料: - 001:领取<Spr ...

  7. 深入理解Spring系列之三:BeanFactory解析

    转载 https://mp.weixin.qq.com/s?__biz=MzI0NjUxNTY5Nw==&mid=2247483824&idx=1&sn=9b7c2603093 ...

  8. spring beans源码解读之--BeanFactory进化史

    BeanFactory是访问bean容器的根接口,它是一个bean容器的基本客户端视图. 先让我们看看beanfactory的前生后世吧! beanFactory有四个重要的子接口: SimpleJn ...

  9. Spring 的IOC容器系列的设计与实现:BeanFactory 和 ApplicationContext

    在Spring IOC容器的设计中,我们可以看到两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器的最基本的功能,另一个是ApplicationContex ...

最新文章

  1. mysql general bin区别_MySQL中几种常见的日志
  2. java转账_使用Java模拟银行账户存、取款、转账功能
  3. 【Python】matplotlib基础:数据可视化
  4. centos7安装ansible
  5. sqlliet 创建多表查询的视图_第4关 复杂查询
  6. 一步步在SAP Cloud Platform上创建HANA实例并使用
  7. python学习-数据类型(布尔、空值)
  8. DeepMind 用 GAN 虚构视频真假难辨【智能行业热点】(2019.7.22)
  9. mac下打开多个相同应用程序
  10. 【图论 搜索】bzoj1064: [Noi2008]假面舞会
  11. 九江职业学院计算机专业怎么样,请问九江职业大学和九江职业技术学院,相比之下哪个好一点?...
  12. 最新小浣熊5.0漫画CMS精仿土豪漫画系统源码
  13. HTML页面乱码怎么解决?
  14. cocos creator 游戏框架
  15. 互联网常见34个术语解释
  16. 大麦网滑块验证码自动识别
  17. go牛刀小试:go的打点器ticker,可停止
  18. css3遮罩——新功能引导层
  19. Codeforces Round #470 (Div. 2) A Protect Sheep (基础)输入输出的警示、边界处理
  20. 国产下的netcore

热门文章

  1. 数字化转型引领企业成功转型的6大举措
  2. HttpRequest 介绍
  3. 元宇宙012 | 世界人工智能大会之元宇宙论坛:技术篇
  4. python证书过期_简单python脚本监控SSL证书到期提醒
  5. 【POI1999】【BZOJ2936】降 水
  6. Wireshark分析实际报文理解SSL(TLS)协议
  7. execv 函数的应用
  8. html 5 压缩zip,Zip
  9. 前端代码规范——CSS代码规范
  10. 想学会刷机就得学会怎么刷小米4S这种手机就能会了