一图胜千言
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工厂。@NullableBeanFactory 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定义。