一图胜千言
BeanFactory 属性&方法解析
-
点击展开注意:以上代码仅供参考,可能存在不完整或不准确的情况。
public interface BeanFactory { // 根据Bean名称返回Bean实例。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 Object getBean(String name) throws BeansException; // 根据Bean名称和构造函数参数返回Bean实例。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 Object getBean(String name, Object... args) throws BeansException; // 根据Bean名称和期望的类型返回Bean实例。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 // 如果Bean的类型与期望的类型不兼容,则抛出BeanNotOfRequiredTypeException异常。 <T> T getBean(String name, Class<T> requiredType) throws BeansException; // 根据期望的类型返回Bean实例。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 // 如果Bean的类型与期望的类型不兼容,则抛出BeanNotOfRequiredTypeException异常。 <T> T getBean(Class<T> requiredType) throws BeansException; // 判断是否存在指定名称的Bean。 boolean containsBean(String name); // 判断指定名称的Bean是否是单例的。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 boolean isSingleton(String name) throws NoSuchBeanDefinitionException; // 判断指定名称的Bean是否是原型的。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 boolean isPrototype(String name) throws NoSuchBeanDefinitionException; // 返回指定名称的Bean定义。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 BeanDefinition getBeanDefinition(String name) throws NoSuchBeanDefinitionException; // 返回所有Bean名称。 String[] getBeanDefinitionNames(); // 返回指定类型的Bean名称。 <T> Map<String, T> getBeansOfType(Class<T> type) throws BeansException; // 返回指定类型的Bean名称,但不包括子Bean工厂中定义的Bean。 <T> Map<String, T> getBeansOfType(Class<T> type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException; // 返回Bean的类型。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 Class<?> getType(String name) throws NoSuchBeanDefinitionException; // 判断指定名称的Bean是否是某个类型或其子类型。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException; // 判断指定名称的Bean是否是某个类型或其子类型。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException; // 返回Bean的依赖关系。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 String[] getDependenciesForBean(String name) throws NoSuchBeanDefinitionException; // 返回Bean的依赖关系。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 String[] getDependenciesForBean(String name, Class<?> dependentBeanType) throws NoSuchBeanDefinitionException; // 返回Bean的依赖关系。 // 如果Bean不存在,则抛出NoSuchBeanDefinitionException异常。 Set<String> getDependenciesForBean(String name, Class<?> dependentBeanType, boolean recursive) throws NoSuchBeanDefinitionException; // 返回Bean是否在当前Bean工厂中定义。 boolean containsLocalBean(String name); // 将Bean注册到Bean工厂中。 void registerSingleton(String beanName, Object singletonObject) throws IllegalStateException; // 将Bean定义注册到Bean工厂中。 void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException; // 返回Bean工厂的父Bean工厂。 @Nullable BeanFactory getParentBeanFactory(); // 添加Bean后处理器。 void addBeanPostProcessor(BeanPostProcessor beanPostProcessor); // 返回所有Bean后处理器。 List<BeanPostProcessor> getBeanPostProcessors(); // 判断是否存在指定名称的Bean后处理器。 boolean hasBeanPostProcessor(String beanPostProcessorName); // 返回指定名称的Bean后处理器。 BeanPostProcessor getBeanPostProcessor(String beanPostProcessorName); // 添加嵌入式Bean定义读取器。 void addEmbeddedValueResolver(StringValueResolver valueResolver); // 返回所有嵌入式Bean定义读取器。 StringValueResolver getEmbeddedValueResolver(); // 判断是否存在嵌入式Bean定义读取器。 boolean hasEmbeddedValueResolver(); // 返回Bean的资源描述信息。 Resource getResource(String location); // 转换类型。 <T> T convertIfNecessary(Object value, Class<T> requiredType) throws BeanNotOfRequiredTypeException; // 转换类型。 <T> T convertIfNecessary(Object value, Class<T> requiredType, MethodParameter methodParam) throws BeanNotOfRequiredTypeException; // 解析嵌入式值。 String resolveEmbeddedValue(String value); // 设置Bean类加载器。 void setBeanClassLoader(ClassLoader classLoader); // 返回Bean类加载器。 ClassLoader getBeanClassLoader(); // 设置临时ClassLoader。 void setTempClassLoader(ClassLoader tempClassLoader); // 返回临时ClassLoader。 ClassLoader getTempClassLoader(); // 注册BeanFactoryPostProcessor。 void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor); // 返回所有BeanFactoryPostProcessor。 List<BeanFactoryPostProcessor> getBeanFactoryPostProcessors(); // 判断是否存在指定名称的BeanFactoryPostProcessor。 boolean hasBeanFactoryPostProcessor(String beanFactoryPostProcessorName); // 返回指定名称的BeanFactoryPostProcessor。 BeanFactoryPostProcessor getBeanFactoryPostProcessor(String beanFactoryPostProcessorName); // 销毁Bean实例。 void destroyBean(String name); // 销毁所有单例Bean实例。 void destroySingletons(); // 注册DestroyAwareBeanPostProcessor。 void registerDestroyAwareBeanPostProcessors(DestroyAwareBeanPostProcessor... postProcessors); // 返回所有DestroyAwareBeanPostProcessor。 List<DestroyAwareBeanPostProcessor> getDestroyAwareBeanPostProcessors(); // 判断是否存在指定名称的DestroyAwareBeanPostProcessor。 boolean hasDestroyAwareBeanPostProcessor(String destroyAwareBeanPostProcessorName); // 返回指定名称的DestroyAwareBeanPostProcessor。 DestroyAwareBeanPostProcessor getDestroyAwareBeanPostProcessor(String destroyAwareBeanPostProcessorName); // 注册DisposableBean实例。 void registerDisposableBean(String beanName, DisposableBean disposableBean); // 注册DisposableBean实例。 void registerDisposableBean(String beanName, Runnable disposableBean); // 返回所有DisposableBean实例。 Set<String> getDisposableBeans(); // 判断是否存在指定名称的DisposableBean实例。 boolean hasDisposableBean(String disposableBeanName); // 返回指定名称的DisposableBean实例。 DisposableBean getDisposableBean(String disposableBeanName); // 注册BeanFactoryAware实例。 void autowireBeanFactoryAware(BeanFactoryAware instance); // 注册BeanNameAware实例。 void autowireBeanNameAware(BeanNameAware instance, String beanName); // 注册BeanClassLoaderAware实例。 void autowireBeanClassLoaderAware(BeanClassLoaderAware instance); // 注册ApplicationContextAware实例。 void autowireApplicationContextAware(ApplicationContextAware instance); // 注册ResourceLoaderAware实例。 void autowireResourceLoaderAware(ResourceLoaderAware instance); // 注册ApplicationEventPublisherAware实例。 void autowireApplicationEventPublisherAware(ApplicationEventPublisherAware instance); // 注册MessageSourceAware实例。 void autowireMessageSourceAware(MessageSourceAware instance); // 注册ApplicationContextMessageSource实例。 void autowireApplicationContextMessageSource(ApplicationContextMessageSource messageSource); // 注册EnvironmentAware实例。 void autowireEnvironmentAware(EnvironmentAware instance); // 注册EmbeddedValueResolverAware实例。 void autowireEmbeddedValueResolverAware(EmbeddedValueResolverAware instance); // 注册ResourcePatternResolverAware实例。 void autowireResourcePatternResolverAware(ResourcePatternResolverAware instance); // 注册ApplicationStartupAware实例。 void autowireApplicationStartupAware(ApplicationStartupAware instance); // 注册ApplicationArgumentAware实例。 void autowireApplicationArgumentAware(ApplicationArgumentAware instance); // 注册ApplicationReadyEvent实例。 void autowireApplicationReadyEvent(ApplicationReadyEvent event); // 注册ApplicationFailedEvent实例。 void autowireApplicationFailedEvent(ApplicationFailedEvent event); // 注册ApplicationEnvironmentPreparedEvent实例。 void autowireApplicationEnvironmentPreparedEvent(ApplicationEnvironmentPreparedEvent event); // 注册ApplicationPreparedEvent实例。 void autowireApplicationPreparedEvent(ApplicationPreparedEvent event); // 注册ContextClosedEvent实例。 void autowireContextClosedEvent(ContextClosedEvent event); // 注册ContextRefreshedEvent实例。 void autowireContextRefreshedEvent(ContextRefreshedEvent event); // 注册RequestHandledEvent实例。 void autowireRequestHandledEvent(RequestHandledEvent event); // 注册SessionStartedEvent实例。 void autowireSessionStartedEvent(SessionStartedEvent event); // 注册SessionDestroyedEvent实例。 void autowireSessionDestroyedEvent(SessionDestroyedEvent event) }
BeanFactory接口中定义了许多方法,用于管理Bean的生命周期、依赖关系和配置。这些方法可以分为以下几类:
- 获取Bean实例:getBean()、getBeanDefinition()、getType()、isSingleton()、isPrototype()等。
- 查找Bean:containsBean()、getBeanDefinitionNames()、getBeansOfType()等。
- 注册Bean:registerSingleton()、registerBeanDefinition()等。
- 处理Bean后处理器:addBeanPostProcessor()、getBeanPostProcessors()等。
- 处理嵌入式值:addEmbeddedValueResolver()、getEmbeddedValueResolver()等。
- 类型转换:convertIfNecessary()等。
- 资源加载:getResource()等。
- 销毁Bean:destroyBean()、destroySingletons()等。
- 注册各种感知接口:autowireBeanFactoryAware()、autowireBeanNameAware()、autowireBeanClassLoaderAware()、autowireApplicationContextAware()等。
这些方法为Spring IoC容器提供了基础的依赖注入功能,使得用户可以通过BeanFactory接口来管理Bean的生命周期、依赖关系和配置。
一些实体类的介绍
好的,以下是一个表格形式的 Spring BeanFactory 接口和实现类的层次结构:
编号 | 接口/实现类名称 | 描述 |
---|---|---|
1 | BeanFactory (接口) | Spring IoC 容器的基础接口,提供了最基本的依赖注入功能 |
2 | ListableBeanFactory (接口) | BeanFactory 的子接口,提供了查找 Bean 定义和 Bean 实例的功能 |
3 | HierarchicalBeanFactory (接口) | BeanFactory 的子接口,提供了层次化 Bean 工厂的功能 |
4 | ConfigurableBeanFactory (接口) | HierarchicalBeanFactory 的子接口,提供了配置 Bean 工厂的功能 |
5 | AutowireCapableBeanFactory (接口) | ConfigurableBeanFactory 的子接口,提供了自动装配 Bean 的功能 |
6 | DefaultListableBeanFactory (实现类) | Spring 内部使用的一个实现类,它是 Spring 中最常用的 Bean 工厂实现。它扩展了 AbstractAutowireCapableBeanFactory 类,实现了 DefaultSingletonBeanRegistry 接口和 ConfigurableListableBeanFactory 接口。DefaultListableBeanFactory 提供了完整的 Bean 生命周期管理功能,包括创建 Bean 实例、设置 Bean 属性、初始化 Bean 实例和销毁 Bean 实例等 |
7 | XmlBeanFactory (实现类) | 一个已经过时的实现类,它使用 XML 文件来配置 Bean。它扩展了 DefaultListableBeanFactory 类,实现了 ResourceLoaderAware 接口和 BeanDefinitionRegistry 接口。XmlBeanFactory 已经不再推荐使用,取而代之的是使用 ApplicationContext 接口和它的实现类 |
8 | ApplicationContext (接口) | 一个扩展了 BeanFactory 接口的接口,它提供了更多的功能,例如国际化支持、事件发布、资源加载等。ApplicationContext 接口有多个实现类,例如 ClassPathXmlApplicationContext、FileSystemXmlApplicationContext 和 AnnotationConfigApplicationContext 等。这些实现类都扩展了 DefaultListableBeanFactory 类,实现了 ApplicationContext 接口和 ApplicationEventPublisher 接口 |
9 | ConfigurableApplicationContext (接口) | ApplicationContext 接口的子接口,提供了对 Spring 容器的配置管理功能。它扩展了 ApplicationContext 接口,实现了 Lifecycle 接口和 ConfigurableBeanFactory 接口 |
10 | AbstractApplicationContext (实现类) | ConfigurableApplicationContext 接口的实现类,提供了对 Spring 容器的基本配置管理功能,例如刷新容器、发布事件、加载资源等。它扩展了 DefaultResourceLoader 类,实现了 ConfigurableApplicationContext 接口 |
11 | ClassPathXmlApplicationContext (实现类) | AbstractApplicationContext 的子类,它从类路径中加载 XML 配置文件,创建并管理 Spring 容器。它扩展了 AbstractXmlApplicationContext 类,实现了 ApplicationContext 接口 |
12 | FileSystemXmlApplicationContext (实现类) | AbstractApplicationContext 的子类,它从文件系统中加载 XML 配置文件,创建并管理 Spring 容器。它扩展了 AbstractXmlApplicationContext 类,实现了 ApplicationContext 接口 |
13 | AnnotationConfigApplicationContext (实现类) | AbstractApplicationContext 的子类,它使用 Java 配置类来创建并管理 Spring 容器。它扩展了 AbstractRefreshableConfigApplicationContext 类,实现了 ApplicationContext 接口 |
总之,Spring 的 Bean 工厂有多个层次结构,每个层次结构都提供了不同的功能。这些层次结构从基础的 BeanFactory 接口开始,逐渐扩展为更高级的功能,最终实现为 DefaultListableBeanFactory 类。这种层次结构使得 Spring 的 Bean 工厂具有非常强大和灵活的功能。同时,Spring 还提供了更高级的 ApplicationContext 接口,进一步扩展了 BeanFactory 接口的功能。
这里只介绍一些比较常用的实现类和接口
- ListableBeanFactory
- HierarchicalBeanFactory
- ConfigurableBeanFactory
- AutowireCapableBeanFactory
ListableBeanFactory介绍
用于枚举、检索容器中所有bean
好的,以下是ListableBeanFactory接口中的每个方法的示例及其使用方式的说明:
String[] getBeanDefinitionNames()
:返回当前BeanFactory中所有Bean定义的名称数组。
// 获取所有Bean定义的名称数组
String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
for (String beanName : beanDefinitionNames) {
System.out.println(beanName);
}
int getBeanDefinitionCount()
:返回当前BeanFactory中所有Bean定义的数量。
// 获取Bean定义的数量
int count = beanFactory.getBeanDefinitionCount();
System.out.println("Bean定义的数量:" + count);
boolean containsBeanDefinition(String beanName)
:判断当前BeanFactory中是否包含指定名称的Bean定义。
// 判断Bean定义是否存在
boolean exists = beanFactory.containsBeanDefinition("myBean");
System.out.println("Bean定义是否存在:" + exists);
BeanDefinition getBeanDefinition(String beanName)
:返回当前BeanFactory中指定名称的Bean定义。