Spring核心接口:BeanFactory接口

一图胜千言

在这里插入图片描述

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 接口和实现类的层次结构:

编号接口/实现类名称描述
1BeanFactory (接口)Spring IoC 容器的基础接口,提供了最基本的依赖注入功能
2ListableBeanFactory (接口)BeanFactory 的子接口,提供了查找 Bean 定义和 Bean 实例的功能
3HierarchicalBeanFactory (接口)BeanFactory 的子接口,提供了层次化 Bean 工厂的功能
4ConfigurableBeanFactory (接口)HierarchicalBeanFactory 的子接口,提供了配置 Bean 工厂的功能
5AutowireCapableBeanFactory (接口)ConfigurableBeanFactory 的子接口,提供了自动装配 Bean 的功能
6DefaultListableBeanFactory (实现类)Spring 内部使用的一个实现类,它是 Spring 中最常用的 Bean 工厂实现。它扩展了 AbstractAutowireCapableBeanFactory 类,实现了 DefaultSingletonBeanRegistry 接口和 ConfigurableListableBeanFactory 接口。DefaultListableBeanFactory 提供了完整的 Bean 生命周期管理功能,包括创建 Bean 实例、设置 Bean 属性、初始化 Bean 实例和销毁 Bean 实例等
7XmlBeanFactory (实现类)一个已经过时的实现类,它使用 XML 文件来配置 Bean。它扩展了 DefaultListableBeanFactory 类,实现了 ResourceLoaderAware 接口和 BeanDefinitionRegistry 接口。XmlBeanFactory 已经不再推荐使用,取而代之的是使用 ApplicationContext 接口和它的实现类
8ApplicationContext (接口)一个扩展了 BeanFactory 接口的接口,它提供了更多的功能,例如国际化支持、事件发布、资源加载等。ApplicationContext 接口有多个实现类,例如 ClassPathXmlApplicationContext、FileSystemXmlApplicationContext 和 AnnotationConfigApplicationContext 等。这些实现类都扩展了 DefaultListableBeanFactory 类,实现了 ApplicationContext 接口和 ApplicationEventPublisher 接口
9ConfigurableApplicationContext (接口)ApplicationContext 接口的子接口,提供了对 Spring 容器的配置管理功能。它扩展了 ApplicationContext 接口,实现了 Lifecycle 接口和 ConfigurableBeanFactory 接口
10AbstractApplicationContext (实现类)ConfigurableApplicationContext 接口的实现类,提供了对 Spring 容器的基本配置管理功能,例如刷新容器、发布事件、加载资源等。它扩展了 DefaultResourceLoader 类,实现了 ConfigurableApplicationContext 接口
11ClassPathXmlApplicationContext (实现类)AbstractApplicationContext 的子类,它从类路径中加载 XML 配置文件,创建并管理 Spring 容器。它扩展了 AbstractXmlApplicationContext 类,实现了 ApplicationContext 接口
12FileSystemXmlApplicationContext (实现类)AbstractApplicationContext 的子类,它从文件系统中加载 XML 配置文件,创建并管理 Spring 容器。它扩展了 AbstractXmlApplicationContext 类,实现了 ApplicationContext 接口
13AnnotationConfigApplicationContext (实现类)AbstractApplicationContext 的子类,它使用 Java 配置类来创建并管理 Spring 容器。它扩展了 AbstractRefreshableConfigApplicationContext 类,实现了 ApplicationContext 接口

总之,Spring 的 Bean 工厂有多个层次结构,每个层次结构都提供了不同的功能。这些层次结构从基础的 BeanFactory 接口开始,逐渐扩展为更高级的功能,最终实现为 DefaultListableBeanFactory 类。这种层次结构使得 Spring 的 Bean 工厂具有非常强大和灵活的功能。同时,Spring 还提供了更高级的 ApplicationContext 接口,进一步扩展了 BeanFactory 接口的功能。

这里只介绍一些比较常用的实现类和接口

  1. ListableBeanFactory
  2. HierarchicalBeanFactory
  3. ConfigurableBeanFactory
  4. AutowireCapableBeanFactory

ListableBeanFactory介绍

用于枚举、检索容器中所有bean

好的,以下是ListableBeanFactory接口中的每个方法的示例及其使用方式的说明:

  1. String[] getBeanDefinitionNames():返回当前BeanFactory中所有Bean定义的名称数组。
// 获取所有Bean定义的名称数组
String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();
for (String beanName : beanDefinitionNames) {System.out.println(beanName);
}
  1. int getBeanDefinitionCount():返回当前BeanFactory中所有Bean定义的数量。
// 获取Bean定义的数量
int count = beanFactory.getBeanDefinitionCount();
System.out.println("Bean定义的数量:" + count);
  1. boolean containsBeanDefinition(String beanName):判断当前BeanFactory中是否包含指定名称的Bean定义。
// 判断Bean定义是否存在
boolean exists = beanFactory.containsBeanDefinition("myBean");
System.out.println("Bean定义是否存在:" + exists);
  1. BeanDefinition getBeanDefinition(String beanName):返回当前BeanFactory中指定名称的Bean定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/538448.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系统编程】进程的退出与等待

进程的创建 fork()用于创建子进程。但fork创建的子进程获得的是父进程&#xff08;即调用 fork() 的进程&#xff09;的一份几乎完全相同的副本&#xff0c;包括父进程的代码、数据、堆、栈和数据结构等内容。当进程调用fork后&#xff0c;一旦控制转移到内核中的fork代码后&am…

SpringBoot(接受参数相关注解)

文章目录 1.基本介绍2.PathVariable 路径参数获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息1.代码实例…

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

发生的错误信息&#xff1a; File "C:\Users\malongqiang\.conda\envs\ObjectDetection\lib\ssl.py", line 1309, in do_handshakeself._sslobj.do_handshake() ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。 分析原因&#xff1a; …

App Inventor 2 Clipboard 拓展:实现剪贴板的复制粘贴功能

效果如下&#xff1a; 此 Clipboard 拓展由中文网开发及维护&#xff0c;最新版本 v1.0&#xff0c;基于 TaifunClipboard 开发。 使用方法 属性及方法很简单&#xff0c;默认操作成功后显示提示信息&#xff0c;SuppressToast设置为 假 后&#xff0c;则不显示提示信息。 经测…

k8s部署InfluxDB

&#xff08;作者&#xff1a;陈玓玏&#xff09; 1. 拉取镜像 docker pull influxdb #拉取镜像 docker run -d influxdb:latest #后台运行容器 docker exec -it 89b /bin/bash #进入容器&#xff0c;89b是容器ID的前三位 cd /usr/bin #进入容器后&#xff0c;进入此文件夹…

计数类Dp

文章目录 AcWing 900. 整数划分思路1. 完全背包AC CODE 2. 计数DpAC CODE AcWing 900. 整数划分 链接&#xff1a;https://www.acwing.com/activity/content/problem/content/1008/ 思路 1. 完全背包 完全背包的链接&#xff1a;https://blog.csdn.net/2301_78981471/artic…

【原创】EPLAN中端子图表的制作

在上一期的文章中,我们主要谈了EPLAN制图中常用符号,有伙伴提出,让我们写一篇,关于端子图表的技术资料。我们这篇文章就是作为对伙伴评论的回复。 在EPLAN制图的过程中,我们一起探讨技术问题,共同解决我们现实工作中遇到的问题,欢迎大家在评论区留言,我们会根据大家的…

IPFoxy的正确打开方式

IPFoxy是一个全球动静态代理IP服务器软件&#xff0c;为全球用户提供优质的大数据代理服务&#xff0c;促进网络业务高校进行。目前拥有千万真实纯净IP资源&#xff0c;覆盖超过220个国家和地区&#xff0c;汇聚成优质海外代理池&#xff0c;支持http、https、socks5多种协议类…

人机交互三原则,网络7层和对应的设备、公钥私钥

人机交互三原则 heo Mandel提出了人机交互的三个黄金原则&#xff0c;它们强调了相似的设计目标&#xff0c;分别是&#xff1a; 简单总结为&#xff1a;控负持面–>空腹吃面 1&#xff0c;用户控制 2&#xff0c;减轻负担 3&#xff0c;保持界面一致 置用户于控制之下&a…

2024/3/14 定时器时钟

感觉和之前自己写的那个差不太多&#xff0c;只是用了定时器。贴一下代码. main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "Timer0.h" unsigned char Sec59,Min49,Hour17;void main() {LCD_Init();Time…

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

tar -xzf prometheus-2.7.0-rc.1.linux-amd64.tar.gzcd prometheus-2.7.0-rc.1.linux-amd64/./prometheus --config.fileprometheus.yml --web.listen-address:5555 Prometheus 默认监听端口号为 9090&#xff0c;为了不与系统上的其它进程监听端口冲突&#xff0c;我们在启动…

6个可以免费使用的高质量作品集

如今&#xff0c;一个独特、美观、优秀的在线作品集在 UX 设计师或自由职业者能否找到一份满意的工作或吸引更多潜在用户方面发挥着重要作用&#xff0c;就像简历一样。然而&#xff0c;作为一个没有太多经验的设计师或新手&#xff0c;设计和创建一个详细、完美和引人注目的在…