Spring IoC 依赖来源
2022-08-09 13:32:24   7  举报             
     
         
 AI智能生成
  Spring IoC 依赖来源分析
    作者其他创作
 大纲/内容
  依赖查找的来源    
     Spring BeanDefinition
    
     <bean id="user" class="org.geekbang...User">
  
     @Bean public User user(){...}  
     BeanDefinitionBuilder  
     单例对象    
     API 实现  
     Spring 內建 BeanDefintion    
     内建依赖  
     Spring 內建单例对象    
     内建单例对象  
     依赖注入的来源    
     依赖注入的来源包括依赖查找的来源  
     非 Spring 容器管理的 Bean  
     @Value 标注的外部化配置  
     Spring 容器的管理对象和游离对象
    
     Spring容器的管理对象和游离对象(Resolvable Dependency)对比  
     Spring BeanDefinition 作为依赖来源
    
     要素    
     元数据    
     BeanDefinition  
     注册    
     BeanDefinitionRegistry#registerBeanDefinition  
     类型    
     延迟和非延迟  
     顺序    
     Bean 生命周期顺序按照注册顺序  
     单例对象作为依赖来源    
     要素    
     来源:外部普通 Java 对象(不一定 POJO )  
     注册:SingletonBeanRegistry#registerSingleton  
     限制    
     无生命周期管理  
     无法延迟初始化 Bean  
     单例对象的依赖查找    
     单例对象的依赖查找流程,相对于 Spring BeanDefinition 来说更加简单,找到对象以后进行返回即可。没有生命周期的管理。
  
     非 Spring 容器管理对象作为依赖来源    
     要素
    
     注册:ConfigurableListableBeanFactory#registerResolvableDependency
  
     限制
    
     无生命周期管理
  
     无法实现延迟初始化 Bean
  
     无法通过依赖查找,也不能根据名称进行依赖注入,只能根据类型依赖注入  
     使用示例  
     Spring 中注入案例  
     外部化配置作为依赖来源    
     要素    
     类型:非常规 Spring 对象依赖来源  
     限制    
     无生命周期管理  
     无法实现延迟初始化 Bean  
     无法通过依赖查找  
     案例    
     配置文件  
     使用demo  
     源码分析    
     DefaultListableBeanFactory#doResolveDependency  
     AbstractBeanFactory#resolveEmbeddedValue
  
     面试题精选    
     注入和查找的来源是否相同    
     否,依赖查找的来源仅限于 Spring BeanDefinition 以及单例 对象,而依赖注入的来源还包括 Resolvable Dependency 以及 @Value 所标注的外部化配置  
     单例对象能在 IoC 容器启动后注册吗?    
     可以的,单例对象的注册与 BeanDefinition 不同,BeanDefinition 会被 ConfigurableListableBeanFactory#freezeConfiguration() 方法影 响,从而冻结注册,单例对象则没有这个限制。  
     Spring 依赖注入的来源有哪些?    
     Spring BeanDefinition  
     单例对象  
     Resolvable Dependency  
     @Value 外部化配置  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 