SPRING05_BeanFactory概述、HierarchicalBeanFactory、ListableBeanFacotory、DefaultListableBeanFactory档案馆详解(三)

简介: SPRING05_BeanFactory概述、HierarchicalBeanFactory、ListableBeanFacotory、DefaultListableBeanFactory档案馆详解(三)

⑥. 组合DefaultListableBeanFactory有何用?


DefaultListableBeanFactory它这里面有一些Map,serializableFactories这个map里面引入的是自己的工厂,组合模式,还是组合自己,自己组合自己会形成整个工厂的继承树,每一个工厂都会有它的一个唯一ID用Map,也就是说在Spring中整个用起来只有一个工厂,实际上Spring里面可以允许有无数个工厂,每一个工厂都能够造一些东西。


这样做的好处就是工厂跟工厂之间造的bean可以隔离起来,所以有的时候环境里面有某些bean不想让别人引用到,但是只需要它的这个范围内引用到就可以多个工厂模式,当然截止到目前,还没有看到任何一个项目里面有用到多工厂的,但是Spring底层有定义


  /** Map from serialized id to factory instance. */
  //这里引入的是自己的工厂,组合模式,还是组合自己,自己组合自己会形成整个工厂的继承树
  private static final Map<String, Reference<DefaultListableBeanFactory>> 
  serializableFactories =new ConcurrentHashMap<>(8);


/** List of bean definition names, in registration order. */
//beanDefinitionNames :bean定义的名字,这里就是保存bean定义的名字, 
//也就是资料库里面保存所有bean定义的名字
private volatile List<String> beanDefinitionNames = new ArrayList<>(256);
/** Map of singleton-only bean names, keyed by dependency type. */
//ingletonBeanNamesByType:按照类型保存单实例的,这也就解释了,spring底层,能够按照类型找到组
//件的一个底层池,其实就是在map拿,就是组件创建好了, 传一个类型,然后从这个map中得到这个类型对应
//的组件的名字,然后再从ioc容器中按照名字得到组件。
private final Map<Class<?>, String[]> singletonBeanNamesByType = new ConcurrentHashMap<>(64);
/** Map of singleton and non-singleton bean names, keyed by dependency type. */
//allBeanNamesByType:按照这个类型找到所有的bean
private final Map<Class<?>, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64);
/** Map of bean definition objects, keyed by bean name. */
//beanDefinitionMap:所有bean定义信息的集合,按照名字以及对应BeanDefinition关系都保存好了,
//这也解释了Spring架构原理里面,Spring解析来的所有资源都会存在这个档案馆,这个档案馆就是一个
//beanDefinitionMap
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);


⑤. DefaultListableBeanFactory档案馆


①. 可以看出来DefaultListableBeanFactory是BeanDefinitionRegistry(Bean定义信息注册中心),也是SimpleAliasRegistry(别名中心),还是SingletonBeanRegistry(单实例bean的中心),还是BeanFactory(Bean工厂),所以这就是总档案馆(DefaultListableBeanFactory)


②. 总档案馆DefaultListableBeanFactory虽然没有跟IOC容器形成父子关系,但它却形成了组合关系(IOC容器组合了整个总档案馆DefaultListableBeanFactory)


③. DefaultListableBeanFactory在Spring中扮演者至关重要的角色


微信图片_20220108225516.png


⑥. AutowireCapableBeanFactory


  • ①. 提供了自动装配能力,也就是BeanFactory还出了一个自动装配厂,这个自动装配厂只是扩展了一些功能


微信图片_20220108225538.png


②. 所有的自动装配功能由AutowireCapableBeanFactory定义,但最终的实现是有很多来实现这个方法


③. AnnotationApplicationContext它自己没有自动装配能力,但是它组合了(DefaultListableBeanFactory)档案馆(它有自动装配能力),所以AnnotationApplicationContext也又有了自动装配能力。


相关文章
|
7月前
|
设计模式 开发框架 Java
Spring及工厂模式概述
Spring及工厂模式概述
57 8
|
6月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
47 1
|
2月前
|
Java 数据库连接 数据库
让星星⭐月亮告诉你,SSH框架01、Spring概述
Spring是一个轻量级的Java开发框架,旨在简化企业级应用开发。它通过IoC(控制反转)和DI(依赖注入)降低组件间的耦合度,支持AOP(面向切面编程),简化事务管理和数据库操作,并能与多种第三方框架无缝集成,提供灵活的Web层支持,是开发高性能应用的理想选择。
40 1
|
4月前
|
Java API Spring
Spring5入门到实战------1、Spring5框架概述、入门案例
这篇文章是Spring5框架的入门教程,概述了Spring框架的核心概念和特点,并通过一个创建普通Java类的案例,详细演示了从下载Spring核心Jar包、创建配置文件、编写测试代码到运行测试结果的完整流程,涵盖了Spring IOC容器的使用和依赖注入的基本用法。
|
7月前
|
安全 前端开发 Java
学习从Struts迁移到Spring的策略概述
从Struts框架迁移到Spring框架是一个常见的升级路径,主要是为了利用Spring框架提供的更多功能、更好的模块化支持以及更广泛的社区资源。
110 3
|
6月前
|
XML 开发框架 Java
Spring框架第一篇(Spring概述与IOC思想)
Spring框架第一篇(Spring概述与IOC思想)
|
6月前
|
开发框架 前端开发 Java
Spring概述(1)
Spring概述(1)
50 0
|
7月前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
89 1
|
7月前
|
安全 Java API
第1章 Spring Security 概述(2024 最新版)(下)
第1章 Spring Security 概述(2024 最新版)
110 0
|
7月前
|
安全 Java 数据安全/隐私保护
第1章 Spring Security 概述(2024 最新版)(上)
第1章 Spring Security 概述(2024 最新版)
115 0