首页 > 其他分享 >springboot~ConfigurableListableBeanFactory和ApplicationContext的使用场景

springboot~ConfigurableListableBeanFactory和ApplicationContext的使用场景

时间:2023-11-15 14:32:27浏览次数:33  
标签:ApplicationContext springboot 容器 接口 应用程序 Bean ConfigurableListableBeanFactory

在工具类中封装getBean,使用哪个接口来实现

实事上,在工具类中,实现BeanFactoryPostProcessor和ApplicationContextAware接口后,使用它们构造方法里的对象ConfigurableListableBeanFactory和ApplicationContext都可以很方便的获取spring容器里的bean,而在实际应用时,还有有些不同的,比如在我们的@Configuration配置类中,我直接使用ApplicationContextAware里的ApplicationContext对象来获取bean,我是否工具类里的,它是无法正常得到ApplicationContext对象的,也就无法获取bean了;而如果实现的是BeanFactoryPostProcessor接口,通过它的ConfigurableListableBeanFactory对象来获取bean,结果是正常的,我应该与这两个的加载机制有关吧。

总结:当你封装一个SpringUtils工具类时,获取bean对象的方法时,最好使用BeanFactoryPostProcessor接口里的ConfigurableListableBeanFactory对象,这样可以避免NPE(NullPointerException)的问题。

使用场景和功能

ConfigurableListableBeanFactoryApplicationContext 都是 Spring 容器的接口,它们有各自的使用场景和功能:

  1. ConfigurableListableBeanFactory 的使用场景:
  • Bean 定义和注册ConfigurableListableBeanFactory 可用于创建和注册 Bean 的定义,通常在编程式配置 Spring 容器时使用。这对于需要动态创建和注册 Bean 定义的情况很有用。
  • Bean 的延迟初始化:您可以使用 ConfigurableListableBeanFactory 来设置 Bean 的延迟初始化属性,使容器只在需要时创建 Bean 实例。
  • Bean 后处理器:如果您需要自定义 Bean 后处理器,可以使用 ConfigurableListableBeanFactory 来注册这些处理器,以对 Bean 实例进行定制化的初始化或销毁操作。
  • 基本的 Bean 检索:虽然 ConfigurableListableBeanFactory 也允许您检索 Bean 实例,但它通常用于基本的编程式 Bean 检索,例如通过 Bean 名称检索。
  1. ApplicationContext 的使用场景:
  • 应用程序上下文管理ApplicationContext 是 Spring 应用程序的主要上下文管理器。它通常用于加载和管理应用程序的配置,包括 Bean 定义、配置文件、资源、国际化等。
  • 依赖注入ApplicationContext 是依赖注入的核心容器,它负责创建、配置和管理 Bean 实例,并确保它们的依赖关系被满足。
  • AOP 和事务管理ApplicationContext 提供了 AOP 和事务管理的支持,您可以配置切面、通知和事务策略。
  • 国际化和消息源ApplicationContext 提供了国际化和消息资源管理的功能,使应用程序能够支持多语言和本地化。
  • 事件发布ApplicationContext 支持应用程序内部事件的发布和监听,这对于实现松耦合的组件通信非常有用。
  • Web 应用程序上下文:Spring 的 WebApplicationContext 扩展了 ApplicationContext,提供了在 Web 应用程序中的特定功能,如 Servlet 上下文和 Web 事件处理。

总的来说,ConfigurableListableBeanFactory 主要用于编程式配置和基本的 Bean 定义、检索以及自定义 Bean 处理。ApplicationContext 是一个更高级的容器,适用于应用程序上下文管理、依赖注入、AOP、事务、国际化、事件发布等高级功能,特别适合开发应用程序。在大多数情况下,应用程序中使用的容器通常是 ApplicationContext 或其派生类型。

区别

getBean 方法在 ConfigurableListableBeanFactoryApplicationContext 接口中都存在,但它们之间有一些重要的区别,主要涉及到 Spring 容器的层次结构和功能。

  1. ConfigurableListableBeanFactory
  • ConfigurableListableBeanFactory 是 Spring 容器中 Bean 工厂的接口,它提供了访问和操作 Bean 定义和实例的基本方法。
  • getBean 方法允许从容器中获取指定名称的 Bean 实例,但通常需要传递类型参数用于类型安全检查。这意味着它返回的是原始 Bean 实例,你需要自行转型为具体的对象。
  • ConfigurableListableBeanFactory 不提供高级功能,如国际化、事件发布、AOP等,因为它的主要职责是管理 Bean 的定义和创建。
  1. ApplicationContext
  • ApplicationContext 是 Spring 容器的更高级别接口,它扩展了 ConfigurableListableBeanFactory 并添加了更多功能。
  • getBean 方法在 ApplicationContext 中除了允许获取 Bean 实例外,还允许传递 Bean 类型和其他可选参数来更精确地检索 Bean。它返回的是 Bean 对象,无需手动进行类型转换。
  • ApplicationContext 提供了更多的功能,如国际化、事件发布、资源访问、AOP代理等。它还支持扩展,允许通过自定义的 Bean 后处理器等方式干预容器的行为。

总的来说,ConfigurableListableBeanFactory 是一个较低级别的 Bean 工厂接口,主要用于 Bean 的创建和管理。ApplicationContext 则是更高级别的接口,它构建在 ConfigurableListableBeanFactory 之上,并提供了更多功能和便捷性,通常更适合应用程序的上下文管理。

作者:仓储大叔,张占岭,
荣誉:微软MVP


标签:ApplicationContext,springboot,容器,接口,应用程序,Bean,ConfigurableListableBeanFactory
From: https://blog.51cto.com/u_15765017/8390821

相关文章

  • SpringBoot 配置文件内容加密
    1.引入pom<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.3</version>......
  • SpringBoot和mybatisPlus得核心知识点
    SpringBoot自动配置(Auto-Configuration):SpringBoot核心特性之一是自动配置。它尝试根据项目的依赖和内容推断应用程序应该如何配置。这简化了开发人员的工作,因为他们无需手动配置大量的设置。起步依赖(StarterDependencies):SpringBoot提供了一系列预配置的依赖项,称为“起......
  • SpringBoot整合数据可视化大屏使用
    整合数据可视化大屏是现代化应用程序中的一个重要组成部分,它可以帮助我们更直观地展示和理解大量的数据。在SpringBoot框架中,我们可以使用一些优秀的前端数据可视化库来实现数据可视化大屏,例如ECharts、Highcharts等。本文将详细介绍如何在SpringBoot中整合数据可视化大屏。1......
  • 使用Winsw部署springboot项目
    原文地址:https://blog.csdn.net/weixin_43862767/article/details/120725943使用Winsw部署springboot项目文章目录使用Winsw部署springboot项目前言一、WinSW是什么?二、WinSW下载及使用1.下载2.使用XML配置安装服务后续部署前言之前工作项目部署环境都是使用的Windows服务器,但是w......
  • springboot
    pom.xml文件<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> &l......
  • Spring,SpringMVC,SpringBoot中注解讲解
    目录1Spring和SpringMVC注解1.1SpringMVC注解[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@ExceptionHandler1.1.11@ResponseS......
  • springboot 注解学习之——@SpringBootApplication
    springboot注解学习之——@SpringBootApplicationspringboot版本3.1.5@Inherited//不认识的注解,顺便学习,字面意思:继承@SpringBootConfiguration//字面意思:SpringBoot配置@EnableAutoConfiguration//字面意思:可以自动配置@Inherited它是一个元注解(就是用来声明注解......
  • 214-springboot定时任务@Scheduled
    @Scheduled(fixedDelay=5000)@Scheduled(fixedDelay=5000),是启动后,马上开始第一次执行任务的么?应用启动时,任务会被立即执行。执行完成后,会等待5秒(因为fixedDelay设置为5000毫秒),然后再次执行任务。以后每次执行完任务,都会等待5秒后再次执行。类的注解:@Configuration@Ena......
  • 在linux上部署SpringBoot项目
    部署项目到linux软件安装项目部署1.软件安装1.1软件安装方式在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下:安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布,只要解压,修改配置即可rpm安装软件已经按照redhat的包管理......
  • springboot常用注解
    1、@SpringBootApplication这是SpringBoot最最最核心的注解,用在SpringBoot主类上,标识这是一个SpringBoot应用,用来开启SpringBoot的各项能力。其实这个注解就是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 这三个注解的组合,也可以用这三......