Spring--SpringIOC的依赖查找
Posted jazon@
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring--SpringIOC的依赖查找相关的知识,希望对你有一定的参考价值。
Spring依赖查找的根源
- 在JavaBeans里有依赖查找,BeanContext。在JNDI也有依赖查找,Context类。
SpringIOC单一类型依赖查找接口
- 根据Bean名称查找: getBean(String)
- 根据Bean类型查找: 1. 实时查找(getBean(Class))。2.Spring 5.1 Bean延迟查找,getBeanProvider(Class)。
ObjectProvider是Spring提供的一种宽松注入方式,解决了强制依赖以及同类型多个bean的问题。
SpringIOC集合类型依赖查找-ListableBeanFactory
- 获取同类型的Bean名称列表getBeanNameForType(Class),获取同类型Bean实例列表,getBeanOfType(Class)
- 获取标注类型Bean名称列表,getBeanNamesForAnnotation(Class<? extends Annotation>),获取标注类型Bean实例列表getBeansWithAnnotation(Class<? extends Annotation>)
- 指定名称+标注类型获取Bean实例, findAnnotationOnBean(String, Class<? extends Annotation>)
SpringIOC层次依赖查找-HierarchicalBeanFactory
SpringIOC有父容器的概念,下面介绍一些API
- 获取父BeanFactory: getParentBeanFactory()
- 层次查找: 1.根据Bean名称查找,containsLocalBean方法实现。2.根据Bean类型查找实例列表, 单一类型: BeanFactoryUtils#beanOfType,集合类型,BeanFactoryUtils#beansOfTypeIncludingAncestors.根据Java注解查找名称列表,BeanFactoryUtils#beanNamesForTypeIncludingAncestors。
SpringIOC的延迟查找
Bean延迟依赖查找接口
- ObjectFactory
- ObjectProvider,Spring5对JAVA8特性扩展,提供了函数式接口,Stream扩展。
SpringIOC安全依赖查找
安全指的找不到也不会抛异常
内建可查找的依赖
Spring依赖查找中经典异常
面试题
- ObjectFactory与BeanFactory的区别
ObjectFactory与BeanFactory均提供依赖查找的能力,不过ObjectFactory仅关注一个或一种类型的Bean依赖查找,并且本身不具备依赖查找的能力,能力由BeanFactory输出,BeanFactory则提供单一类型,集合类型以及层次性等多种以来查找方式。ObjectFactory的经典实现ObjectFactoryCreatingFactoryBean就是底层由BeanFactory提供的支持。
- BeanFactory.getBean操作是否线程安全
BeanFactory.getBean方法的执行是线程安全的,使用了synchronize关键字对definitionMap加锁。
以上是关于Spring--SpringIOC的依赖查找的主要内容,如果未能解决你的问题,请参考以下文章
Spring AOP:Exception encountered during context initialization - cancelling refresh attempt: org.spr