BeanFactory
getBean(String)
getBean(String,Object...)
getBean(Class)
getBean(Class,Object...)
getBeanProvider(Class)
getBeanProvider(ResolvableType)
getBean(String,Class)
ListableBeanFactory
根据 Bean 类型查找
getBeanNamesForType(Class)
getBeanNamesForType(ResolvableType)
getBeansOfType(Class)
以及重载方法
注意通过bean类型进行查找可以会导致bean提前初始化,因为可能需要bean的元信息进行比较。
通过注解类型查找
getBeanNamesForAnnotation(Class<? extends Annotation>)
getBeansWithAnnotation(Class<? extends Annotation>)
findAnnotationOnBean(String,Class<? extends Annotation>)
HierarchicalBeanFactory
getParentBeanFactory()
containsLocalBean
方法实现BeanFactoryUtils#beanOfType
BeanFactoryUtils#beansOfTypeIncludingAncestors
BeanFactoryUtils#beanNamesForTypeIncludingAncestors
getIfAvailable(Supplier)
ifAvailable(Consumer)
stream()
依赖查找类型 | 代表实现 | 是否安全 |
---|---|---|
单一类型查找 | BeanFactory#getBean |
否 |
ObjectFactory#getObject |
否 | |
ObjectProvider#getIfAvailable |
是 | |
集合类型查找 | ListableBeanFactory#getBeansOfType |
是 |
ObjectProvider#stream |
是 |
注意:层次性依赖查找的安全性取决于其扩展的单一或集合类型的 BeanFactory 接口
Bean 名称 | Bean 实例 | 使用场景 |
---|---|---|
environment | Environment 对象 | 外部化配置以及 Profiles |
systemProperties | java.util.Properties 对象 | Java 系统属性 |
systemEnvironment | java.util.Map 对象 | 操作系统环境变量 |
messageSource | MessageSource 对象 | 国际化文案 |
lifecycleProcessor | LifecycleProcessor 对象 | Lifecycle Bean 处理器 |
applicationEventMulticaster | ApplicationEventMulticaster 对 象 | Spring 事件广播器 |
Bean 名称 | Bean 实例 | 使用场景 |
---|---|---|
org.springframework.context.annotation.internalConfigurationAnnotationProcessor | ConfigurationClassPostProcesso | 处理 Spring 配置类 |
org.springframework.context.annotation.internalAutowiredAnnotationProcessor | AutowiredAnnotationBeanPostProcessor 对象 | 处理 @Autowired 以及 @Value 注解 |
org.springframework.context.annotation.internalCommonAnnotationProcessor | CommonAnnotationBeanPostProcessor 对象 | (条件激活)处理 JSR-250 注解,如 @PostConstruct 等 |
org.springframework.context.event.internalEventListenerProcessor | EventListenerMethodProcessor 对象 | 处理标注 @EventListener 的 Spring 事件监听方法 |
org.springframework.context.event.internalEventListenerFactory | DefaultEventListenerFactory 对象 | @EventListener 事件监听方法适配为 ApplicationListener |
org.springframework.context.annotation.internalPersistenceAnnotationProcessor | PersistenceAnnotationBeanPostProcessor 对象 | (条件激活)处理 JPA 注解场景 |
BeansException
子类型异常类型 | 触发条件(举例) | 场景举例 |
---|---|---|
NoSuchBeanDefinitionException | 当查找 Bean 不存在于 IoC 容器时 BeanFactory#getBean | ObjectFactory#getObject |
NoUniqueBeanDefinitionException | 类型依赖查找时,IoC 容器存在多个 Bean 实例 | BeanFactory#getBean(Class) |
BeanInstantiationException | 当 Bean 所对应的类型非具体类时 | BeanFactory#getBean |
BeanCreationException | 当 Bean 初始化过程中 | Bean 初始化方法执行异常时 |
BeanDefinitionStoreException | 当 BeanDefinition 配置元信息非法时 | XML 配置资源无法打开时 |
BeanFactory.getBean
方法的执行是线程安全的,超过过程中会增加互斥锁
1、ObjectFatory和BeanFactory的区别?
2、BeanFactory.getBean操作是否线程安全?
3、Spring依赖查找与注入在来源上面的区别?