代码拉取完成,页面将自动刷新
title: Spring 依赖查找
date: 2020-08-30 16:06:10
categories:
- Java
- 框架
- Spring
- Spring核心
tags:
- Java
- 框架
- Spring
- IOC
- 依赖查找
permalink: /pages/9a6f6b/
依赖查找是主动或手动的依赖查找方式,通常需要依赖容器或标准 API 实现。
IoC 依赖查找大致可以分为以下几类:
此外,根据查找的 Bean 对象是单一或集合对象,是否需要延迟查找等特定常见,有相应不同的 API。
单一类型依赖查找接口- 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)
以及重载方法通过注解类型查找
Spring 3.0 获取标注类型 Bean 名称列表
getBeanNamesForAnnotation(Class<? extends Annotation>)
Spring 3.0 获取标注类型 Bean 实例列表
getBeansWithAnnotation(Class<? extends Annotation>)
Spring 3.0 获取指定名称+ 标注类型 Bean 实例
findAnnotationOnBean(String,Class<? extends Annotation>)
层次性依赖查找接口- HierarchicalBeanFactory
BeanFactory
:getParentBeanFactory()
containsLocalBean
方法实现BeanFactoryUtils#beanOfType
BeanFactoryUtils#beansOfTypeIncludingAncestors
BeanFactoryUtils#beanNamesForTypeIncludingAncestors
Bean 延迟依赖查找接口
org.springframework.beans.factory.ObjectFactory
org.springframework.beans.factory.ObjectProvider
(Spring 5 对 Java 8 特性扩展)getIfAvailable(Supplier)
ifAvailable(Consumer)
依赖查找类型 | 代表实现 | 是否安全 |
---|---|---|
单一类型查找 | BeanFactory#getBean |
否 |
ObjectFactory#getObject |
否 | |
ObjectProvider#getIfAvailable |
是 | |
集合类型查找 | ListableBeanFactory#getBeansOfType |
是 |
ObjectProvider#stream |
是 |
注意:层次性依赖查找的安全性取决于其扩展的单一或集合类型的 BeanFactory
接口
AbstractApplicationContext
内建可查找的依赖
Bean | 名称 Bean | 实例使用场景 |
---|---|---|
environment | Environment 对象 | 外部化配置以及 Profiles |
systemProperties | java.util.Properties 对象 | Java 系统属性 |
systemEnvironment | java.util.Map 对象 | 操作系统环境变量 |
messageSource | MessageSource 对象 | 国际化文案 |
lifecycleProcessor | LifecycleProcessor 对象 | Lifecycle Bean 处理器 |
applicationEventMulticaster | ApplicationEventMulticaster 对象 | Spring 事件广播器 |
注解驱动 Spring 应用上下文内建可查找的依赖(部分)
Bean 名称 | Bean 实例 | 使用场景 |
---|---|---|
org.springframework.context.annotation.internalConfigurationAnnotationProcessor | ConfigurationClassPostProcessor 对象 | 处理 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#getBeanObjectFactory#getObject |
NoUniqueBeanDefinitionException |
类型依赖查找时,IoC 容器存在多个 Bean 实例 | BeanFactory#getBean(Class) |
BeanInstantiationException |
当 Bean 所对应的类型非具体类时 | BeanFactory#getBean |
BeanCreationException |
当 Bean 初始化过程中 | Bean 初始化方法执行异常时 |
BeanDefinitionStoreException |
当 BeanDefinition 配置元信息非法时 |
XML 配置资源无法打开时 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。