Spring IoC 依赖查找
2022-07-05 14:20:59   5  举报             
     
         
 AI智能生成
  Spring依赖查找相关知识点
    作者其他创作
 大纲/内容
  单一类型依赖查找接口 - BeanFactory
    
     根据 Bean 名称查找
    
     getBean(String)
  
     Spring 2.5 覆盖默认参数:getBean(String,Object...)
  
     根据 Bean 类型查找
    
     Bean 实时查找
    
     Spring 3.0 getBean(Class)
  
     Spring 4.1 覆盖默认参数:getBean(Class,Object...)
  
     Spring 5.1 Bean 延迟查找
    
     getBeanProvider(Class)
  
     getBeanProvider(ResolvableType)
  
     根据 Bean 名称 + 类型查找:getBean(String,Class)  
    集合类型依赖查找接口 - ListableBeanFactory
     根据 Bean 类型查找    
     获取同类型 Bean 名称列表    
     getBeanNamesForType(Class)
  
     Spring 4.2 getBeanNamesForType(ResolvableType)
  
     获取同类型 Bean 实例列表
    
     getBeansOfType(Class) 以及重载方法
  
     通过注解类型查找
    
     Spring 3.0 获取标注类型 Bean 名称列表
    
     getBeanNamesForAnnotation(Class<? extends Annotation>)
  
     Spring 3.0 获取标注类型 Bean 实例列表
    
     getBeansWithAnnotation(Class<? extends Annotation>)
  
     Spring 3.0 获取指定名称 + 标注类型 Bean 实例
    
     findAnnotationOnBean(String,Class<? extends Annotation>)  
     层次性依赖查找接口 - HierarchicalBeanFactory
    
     双亲 BeanFactory:getParentBeanFactory()  
     层次性查找
    
     根据 Bean 名称查找
    
     基于 containsLocalBean 方法实现
  
     该方法效果为查询当前 beanFactory 是否有该名称的 Bean  
     根据 Bean 类型查找实例列表
    
     单一类型
    
     BeanFactoryUtils#beanOfTypeIncludingAncestors
  
     集合类型
    
     BeanFactoryUtils#beansOfTypeIncludingAncestors
  
     根据 Java 注解查找名称列表
    
     BeanFactoryUtils#beanNamesForTypeIncludingAncestors  
     Bean 延迟依赖查找接口
    
     org.springframework.beans.factory.ObjectFactory
  
     org.springframework.beans.factory.ObjectProvider
    
     Spring 5 对 Java 8 特性扩展
    
     函数式接口
    
     getIfAvailable(Supplier)
  
     ifAvailable(Consumer)
  
     Stream 扩展 - stream()  
     安全依赖查找    
     单一类型查找
    
     BeanFactory#getBean
    
     不安全  
     ObjectFactory#getObject
    
     不安全  
     ObjectProvider#getIfAvailable
    
     安全  
     集合类型查找
    
     ListableBeanFactory#getBeansOfType
    
     安全  
     ObjectProvider#stream
    
     安全  
     层次性依赖查找
    
     注意:层次性依赖查找的安全性取决于其扩展的单一或集合类型的 BeanFactory 接口  
     DefaultListableBeanFactory 实现了单一类型、集合类型、层次性类型的复合查找
  
     内建可查询依赖    
     AbstractApplicationContext 内建可查找的依赖
  
     注解驱动 Spring 应用上下文内建可查找的依赖(部分)  
     注解驱动 Spring 应用上下文内建可查找的依赖(续)
  
     依赖查找中的经典异常    
     NoSuchBeanDefinitionException    
     触发条件    
     当查找 Bean 不存在于 IoC 容器 时 
  
     场景举例    
     BeanFactory#getBean ObjectFactory#getObject
  
     NoUniqueBeanDefinitionException
    
     触发条件    
     类型依赖查找时,IoC 容器存在多 个 Bean 实例
  
     场景举例    
     BeanFactory#getBean(Class)
  
     BeanInstantiationException
    
     触发条件    
     当 Bean 所对应的类型非具体类时
  
     场景举例    
     BeanFactory#getBean
  
     BeanCreationException
    
     触发条件    
     当 Bean 初始化过程中
  
     场景举例    
     Bean 初始化方法执行异常 时
  
     BeanDefinitionStoreException
    
     触发条件    
     当 BeanDefinition 配置元信息非 法时  
     场景举例    
     XML 配置资源无法打开时
  
     面试题    
     ObjectFactory与BeanFactory的区别
    
     ObjectFactory    
     ObjectFactory继承自ObjectProvider,具有延迟依赖查找的能力  
     BeanFactory时调用代理对象的getBean方法,代理对象为BeanFactory,所以,ObjectFactory实际上没有依赖查找的能力  
     BeanFactory    
     BeanFacotry具有单一类型查找,集合类型查找,复合类型查找的复合型容器  
     BeanFactory#getObject操作线程是否安全    
     安全  
     原因是:底层采用了ConcurrentHashMap,存取都是安全的,第二点创建对象的时候采用了互斥锁  
     源码  
     Spring 依赖查找与注入在来源上的区别?  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 