spring 依赖查找

1、单一类型依赖查找
单一类型依赖查找接口 - BeanFactory
(1)根据 Bean 名称查找:getBean(String)
(2)根据 Bean 类型查找 :getBean(Class)
getBeanProvider(Class)( Spring 5.1 Bean 延迟查找)
(3)根据 Bean 名称 和类型查找:getBean(String,Class)
2、集合类型依赖查找
集合类型依赖查找接口 - ListableBeanFactory
(1)根据 Bean 类型查找
getBeanNamesForType(Class)//获取同类型 Bean 名称列表
getBeansOfType(Class)//获取同类型 Bean 实例列表
(2)通过注解类型查找
getBeanNamesForAnnotation(Class<? extends Annotation>)
getBeansWithAnnotation(Class<? extends Annotation>)
• findAnnotationOnBean(String,Class<? extends Annotation>)
3 、延迟依赖查找
org.springframework.beans.factory.ObjectFactory
org.springframework.beans.factory.ObjectProvider
• 函数式接口 :getIfAvailable(Supplier), ifAvailable(Consumer)
• Stream 扩展 : stream()
4、内建可查找的依赖
(1) AbstractApplicationContext 内建可查找的依赖
| Bean 名称 | Bean 实例 | 使用场景 |
|---|---|---|
| environment | Environment 对象 | 外部化配置以及 Profiles |
| systemProperties | java.util.Properties 对象 | Java 系统属性 |
| systemEnvironment | java.util.Map 对象 | 操作系统环境变量 |
| messageSource | MessageSource 对象 | 国际化文案 |
| lifecycleProcessor | LifecycleProcessor 对象 | Lifecycle Bean 处理器 |
| applicationEventMulticaster | ApplicationEventMulticaster 对 象 | Spring 事件广播器 |
(2)注解驱动 Spring 应用上下文内建可查找的依赖(部分)
| Bean 实例 | 使用场景 |
|---|---|
| ConfigurationClassPostProcesso r 对象 | 处理 Spring 配置类 |
| AutowiredAnnotationBeanPostPro cessor 对象 | 处理@Autowired 以及 @Value注解 |
| CommonAnnotationBeanPostProces sor 对象 | (条件激活)处理 JSR-250 注解, 如 @PostConstruct 等 |
| PersistenceAnnotationBeanPostP rocessor 对象 | (条件激活)处理 JPA 注解场景 |
5、依赖查找中的经典异常
BeansException 子类型
| 异常类型 | 触发条件(举例) |
|---|---|
| NoSuchBeanDefinitionException | 当查找 Bean 不存在于 IoC 容器 时 |
| NoUniqueBeanDefinitionException | 类型依赖查找时,IoC 容器存在多 个 Bean 实例 |
| BeanInstantiationException | 当 Bean 所对应的类型非具体类时 |
| BeanCreationException | 当 Bean 初始化过程中 |
| BeanDefinitionStoreException | 当 BeanDefinition 配置元信息非 法时 |
6、ObjectFactory 与 BeanFactory 的区别?
ObjectFactory 与 BeanFactory 均提供依赖查找的能力。 不过 ObjectFactory 仅关注一个或一种类型的 Bean 依赖查找,并 且自身不具备依赖查找的能力,能力则由 BeanFactory 输出。
BeanFactory 则提供了单一类型、集合类型以及层次性等多种依赖查找方式。
7、BeanFactory.getBean 操作是否线程安全?
BeanFactory.getBean 方法的执行是线程安全的,操作过程中会增加互斥锁。
本文深入探讨了Spring框架中的依赖查找机制,包括BeanFactory的单一和集合类型查找,ListableBeanFactory的注解类型查找,延迟依赖查找以及内建依赖的使用。同时,介绍了在依赖查找过程中可能出现的经典异常及其原因。此外,还对比了ObjectFactory和BeanFactory的区别,并讨论了BeanFactory的线程安全性。

1308

被折叠的 条评论
为什么被折叠?



