L04_spring依赖查找

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 实例使用场景
environmentEnvironment 对象外部化配置以及 Profiles
systemPropertiesjava.util.Properties 对象Java 系统属性
systemEnvironmentjava.util.Map 对象操作系统环境变量
messageSourceMessageSource 对象国际化文案
lifecycleProcessorLifecycleProcessor 对象Lifecycle Bean 处理器
applicationEventMulticasterApplicationEventMulticaster 对 象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 方法的执行是线程安全的,操作过程中会增加互斥锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值