• 欢迎来到Compiler网站,如果对网站内容感兴趣或者帮助到你,请为文章点赞,谢谢!

Spring IoC依赖查找

java 奔跑的蜗牛 2个月前 (04-30) 25次浏览 0个评论 扫描二维码

依赖查找的今世前生

  • 单一类型依赖查找

    • JNDI – javax.naming.Context#lookup

    • JavaBeans – BeanContext

  • 集合类型依赖查找

    • java.beans.beancontext.BeanContext

  • 层次依赖查找

    • java.beans.beancontext.BeanContext

单一类型查找

  • 单一类型依赖查找接口 – BeanFactory

    • 根据Bean名称查找

      • getBean(String)

      • Spring 2.5默认覆盖参数: getBean(String, Object)

    • 根据Bean类型查找

      • Bean实时查找

        • Spring 3.0 getBean(Class)

        • Spring 4.1覆盖默认参数: getBean(Clas, 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实例列表

        • getBeanWithAnnotation(Class<? extends Annotation>)

      • Spring 3.0 获取指定名称 + 指定类型Bean实例

        • findAnnotationOnBean(String, Class<? extends Annotation>)

层次依赖查找

  • 层次性依赖查找接口 – HierarchicalBeanFactory

    • 双亲BeanFactory: getParentBeanFactory

    • 层次性查找

      • 根据Bean名称查找

        • 基于containsLocalBean方法实现

      • 根据Bean类型查找实例列表

        • 单一类型: BeanFactoryUtils#beanOfType

        • 集合类型:BeanFactoryUtils#beansOfTypeIncludingAncestors

    • 根据Java注解查找名称列表

      • BeanFactoryUtils#beanNamesForTypeIncludingAncestors

延迟依赖查找

  • Bean延迟依赖查找接口

    • org.springframework.beans.factory.ObjectFactory

    • org.springframework.beans.factory.ObjectProvider

      • spring5 对Java8特性扩展

        • 函数式接口

          • getIfAvailable(Supplier)

          • ifAvailable(Consumer)

        • String 扩展 – stream();

安全依赖查找

  • 依赖性查找安全性对比

依赖查找类型代表实现是否安全
单一类型查找BeanFactory#getBean
ObjectFactory#getObject
ObjectProvider#getIfAvailable
集合类型查找ListableBeanFactory#getBeansOfType
ObjectProvider#stream

注意: 层次依赖查找的安全性取决于其扩展的单一或集合类型的BeanFactory接口

内建可查找的依赖

Bean名称Bean实例使用场景
environmentEnvironment对象外部化配置以及Profiles
systemPropertitesjava.util.Properties对象Java系统属性
systemEnvironmentjava.util.Map对象操作系统环境变量
messageSourceMessageSource对象国际化文案
lifecycleProcessorLifecycleProcessor对象Lifecycle Bean处理器
applicationEventMulticasterApplicationEventMulticaster对象Spring事件广播器
  • 注解驱动Spring应用上下文内建可查找的依赖(部分)

Bean名称Bean实例使用场景
org.springframework.context.annotation.internalConfigurationAnnotationProcessorConfigurationClassPostProcessor对象处理Spring配置类
org.springframework.context.annotation.internalAutowiredAnnotationProcessorAutowiredAnnotationBeanPostProcessor对象处理@Autowired以及@Value注解
org.springframeword.context.annotation.internalCommonAnnotationProcessorCommonAnnotationBeanPostProcessor对象(条件激活)处理JSR-250注解,如@PostConstruct
org.springframework.context.event.internalEventListenerProcessorEventListenerMethodProcessor对象处理标注@EventListener的Spring事件监听方法
org.springframework.context.event.internalEventListenerFactoryDefaultEventListenerFactory对象@EventListener事件监听方法适配为ApplicationListener
org.spring.framework.context.annotation.internalPersistenceAnnotationProcessorPersistenceAnnotationBeanPostProcessor对象`“条件激活”处理JPA注解场景

Compiler编程笔记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Spring IoC依赖查找
喜欢 (2)
[阳光路上]
分享 (0)
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址