31、Spring容器启动时,为什么先加载BeanFactoryPostProcess

这篇具有很好参考价值的文章主要介绍了31、Spring容器启动时,为什么先加载BeanFactoryPostProcess。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring容器启动时,为什么先加载BeanFactoryPostProcess

  • 因为BeanDefinition会在ioc容器加载的时候先注册, 而BeanFactoryPostProcess就是在所有的BeanDefinition注册完后做扩展的,所以要先加载BeanFactoryPostProcess
  • 解析配置类的组件 它就实现BeanFactoryPostProcess, 所以要先去加载BeanFactoryPostProcess

Bean获取方式

  • 方式一:通过BeanFactory获取
  • 方式二 :通过BeanFactoryAware获取
  • 方式三:启动获取ApplicationContext
  • 方式四:通过继承ApplicationObjectSupport
  • 方式五:通过继承WebApplicationObjectSupport
  • 方式六:通过WebApplicationContextUtils
  • 方式七:通过ApplicationContextAware
  • 方式八:通过ContextLoader
    使用ContextLoader提供的getCurrentWebApplicationContext方法,也是常用的获取WebApplicationContext的一种方法。
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);

  • 方式九:通过BeanFactoryPostProcessor
    Spring工具类,方便在非Spring管理环境中获取Bean。
@Componentpublic
final class SpringUtils implements BeanFactoryPostProcessor {
    /**
     * Spring应用上下文环境
     */
    private static ConfigurableListableBeanFactory beanFactory;

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        SpringUtilsS.beanFactory = beanFactory;
    }

    /**
     * 获取对象     *     * @param name     * @return Object 一个以所给名字注册的bean的实例     * @throws BeansException     *
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) throws BeansException {
        return (T) beanFactory.getBean(name);
    }

    /**
     * 获取类型为requiredType的对象     *     * @param clz     * @return     * @throws BeansException     *
     */
    public static <T> T getBean(Class<T> clz) throws BeansException {
        T result = (T) beanFactory.getBean(clz);
        return result;
    }

    /**
     * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true     *     * @param name     * @return boolean
     */
    public static boolean containsBean(String name) {
        return beanFactory.containsBean(name);
    }

    /**
     * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)     *     * @param name     * @return boolean     * @throws NoSuchBeanDefinitionException     *
     */
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
        return beanFactory.isSingleton(name);
    }

    /**
     * @param name * @return Class 注册对象的类型     * @throws NoSuchBeanDefinitionException     *
     */
    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
        return beanFactory.getType(name);
    }

    /**
     * 如果给定的bean名字在bean定义中有别名,则返回这些别名     *     * @param name     * @return     * @throws NoSuchBeanDefinitionException     *
     */
    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
        return beanFactory.getAliases(name);
    }

    /**
     * 获取aop代理对象     *      * @param invoker     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T getAopProxy(T invoker) {
        return (T) AopContext.currentProxy();
    }
}

文章来源地址https://www.toymoban.com/news/detail-764177.html

到了这里,关于31、Spring容器启动时,为什么先加载BeanFactoryPostProcess的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在容器镜像中为了安全为什么要删除 setuid 和 setgid?

    在容器镜像中删除 setuid(set user ID)和 setgid(set group ID)权限通常是出于安全考虑。这两个权限位允许进程在执行时以文件所有者或文件所属组的身份运行,而不是以调用进程的用户身份运行。 删除 setuid 和 setgid 权限的主要原因包括: 减少潜在的权限滥用: 如果容器中的

    2024年02月20日
    浏览(35)
  • 【Unity细节】Unity中为什么用字符串加载对象,检查多便都加载不出来—(命名细节)

    👨‍💻个人主页 :@元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏 :unity细节和bug 😶‍🌫️优质专栏 ⭐【软件设计师高频考点暴击】 明明名字对上了,类型也对上了,为什么还是加载不出来 命名时,多添加了空格 把空

    2024年02月05日
    浏览(63)
  • Pycharm这个更新索引是个什么操作,为什么每次启动,都会进行?

    点击上方“ Python爬虫与数据挖掘 ”,进行关注 回复“ 书籍 ”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 九重城阙烟尘生,千乘万骑西南行。 大家好,我是皮皮。 一、前言 前几天在Python最强王者交流群【吴超建】问了一个 Pycharm 操作的问题,这里拿出来给大家分

    2024年02月01日
    浏览(56)
  • 【容器架构】你知道有 Docker 为什么还要 K8s 吗?

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月16日
    浏览(71)
  • cron 定时任务,启动shell脚本,为什么没有执行

    Cron 定时任务不执行时,可能有多种原因。下面是一些常见的问题及其解决方法: Cron 服务未运行 :首先确认cron服务是否正在运行。在大多数Linux系统中,你可以使用以下命令查看cron服务的状态: Cron 表达式错误 :确保你的cron表达式是正确的。Cron表达式包括五个或六个字段

    2024年04月13日
    浏览(56)
  • Windows 程序开机自启动速度优化,为什么腾讯会议自启动速度那么高?

    目录 一、问题的说明和定义 二、问题的分析 1.问题初步分析 2.详细的分析: 2.1Windows常见的自启动方式 2.2Windows常见的自启动方式的细节分析 三、问题的解决方案 1、为什么腾讯会议Rooms那么快 2.我们是否可以跟腾讯会议一样快 这两天有个优化项需要做个技术调研,就是我们

    2024年02月02日
    浏览(87)
  • flask启动为什么会调用__call__

    先来看看__call__什么时候时候可以调用 不返回任何结果 有结果返回 注意这个__call__必须要实例化之后才可以调用不然不会调用 无任何结果返回 内置函数同样可以用__call__()方法来调用 自定义函数也也可以通过__call__()方法来调用 接下来理解为什么 这个最后会调取Flask的__cal

    2024年02月16日
    浏览(25)
  • 解决mysql的启动类型设置了自动,为什么电脑开机后还是需要手动启动?

    问题: 明明mysql的启动类型设置了自动,为什么电脑开机后还是需要手动启动,如下图。  解决方式: 一、ctrl+R 快捷键弹出运行框  二、输入 regedit 后回车  三、地址栏内输入  计算机HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl 后回车    四、找到Control入径后,新建一个名称为

    2024年02月14日
    浏览(49)
  • Spring为什么默认是单例的?

    目录 一、五种作用域 二、单例bean与原型bean的区别  三、单例Bean的优势与劣势 一、五种作用域 1.singleton: singleton是Spring Bean的 默认作用域 ,也就是单例模式。在整个应用程序中,只会创建一个实例,Bean的所有请求都会共享这个实例。 2.prototype: prototype表示 原型模式 ,每次

    2024年02月07日
    浏览(38)
  • 【Spring】浅谈spring为什么推荐使用构造器注入

    因本人实力有限,该文章主要内容(在文章基础上加了点点东西)均来自: 原文链接:https://www.cnblogs.com/joemsu/p/7688307.html 作者:joemsu ​ Spring框架对Java开发的重要性不言而喻,其核心特性就是IOC(Inversion of Control, 控制反转)和AOP,平时使用最多的就是其中的IOC,我们通过

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包