Springboot中管理Spring容器重写工具类进行使用

2023-11-12

说明
SpringUtils:既spring工具类 方便在非spring管理环境中获取bean;在SpringBoot或者SpringMVC框架中,基于Spring进行管理容器以及上下文或者等前置操作等
因此需要实现
BeanFactoryPostProcessor; ApplicationContextAware这两个接口(Spring源码的接口喔~)

代码以及相关操作和工具类生成的方法如下:【自行cv阅读】

@Component
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware 
{
    /** Spring应用上下文环境 */
    private static ConfigurableListableBeanFactory beanFactory;

    private static ApplicationContext applicationContext;

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

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException 
    {
        SpringUtils.applicationContext = applicationContext;
    }

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

    /**
     * 获取类型为requiredType的对象
     *
     * @param clz
     * @return
     * @throws org.springframework.beans.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 org.springframework.beans.factory.NoSuchBeanDefinitionException
     *
     */
    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
    {
        return beanFactory.isSingleton(name);
    }

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

    /**
     * 如果给定的bean名字在bean定义中有别名,则返回这些别名
     *
     * @param name
     * @return
     * @throws org.springframework.beans.factory.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();
    }

    /**
     * 获取当前的环境配置,无配置返回null
     *
     * @return 当前的环境配置
     */
    public static String[] getActiveProfiles()
    {
        return applicationContext.getEnvironment().getActiveProfiles();
    }

    /**
     * 获取当前的环境配置,当有多个环境配置时,只获取第一个
     *
     * @return 当前的环境配置
     */
    public static String getActiveProfile()
    {
        final String[] activeProfiles = getActiveProfiles();
        return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;
    }

    /**
     * 获取配置文件中的值
     *
     * @param key 配置文件的key
     * @return 当前的配置文件的值
     *
     */
    public static String getRequiredProperty(String key)
    {
        return applicationContext.getEnvironment().getRequiredProperty(key);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot中管理Spring容器重写工具类进行使用 的相关文章

随机推荐

  • Pyside6 TableView 显示按钮 - QStyledItemDelegate 简单实现

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 示例代码 效果图 参考链接 示例代码 coding utf 8 import sys from PySide6 QtCore import from PySide6 Q
  • 抓包工具tcpdump用法说明

    tcpdump采用命令行方式对接口的数据包进行筛选抓取 其丰富特性表现在灵活的表达式上 不带任何选项的tcpdump 默认会抓取第一个网络接口 且只有将tcpdump进程终止才会停止抓包 例如 shell gt tcpdump nn i e
  • 关于Java中代码块的执行顺序

    1 概念 代码块 使用 定义的一段代码 根据代码块出现的位置以及关键字不同 分为以下四种代码块 普通代码块 直接定义在方法内部 不加任何修饰符定义的代码块 解决变量重名问题 构造块 直接定义在类中 使用 的代码块 静态代码块 一般用于初始化
  • vue2项目引入vue-video-player

    直接安装npm install vue video player save报错 指定版本 npm install vue video player 5 0 1 save vue video player 其实就是 video js 集成到
  • Spring集成Mybatis时的常见报错

    这两个框架集成的时候最常见的是各种映射文件无法对应而引发的报错 根据不同的报错可以优先检查对应的位置 这样才能快速解决问题 1 找不到mybatis的映射文件 如下图 在定义SqlSessionFactoryBean 要注意对应关系 注意
  • ps太卡怎么办?几步帮您解决问题

    PS是一款非常常用的绘图软件 但是有些小伙伴感觉用PS会卡顿 可是电脑的配置也不是很低 排除PS本身的问题后 这种情况往往和ps里的基础设置有关 下面来看看该如何解决PS卡顿的问题吧 1 停用 主页 屏幕 现在很多小伙伴都用上了新版ps 新
  • 我的程序员之路进行中

    计划看的书 1 Windows程序设计 第5版珍藏版 1104页 2 Windows程序设计 第2版 王艳平 扫描版 490页 3 Windows核心编程 第5版 769页 4 竹林蹊径 深入浅出windows驱动开发 506页 5 Win
  • Mybatis小技巧之使用自动生成的主键值

    文章目录 一 需求 1 编写接口 2 编写mapper配置文件 3 测试程序 4 运行结果 一 需求 在数据库种类似id这样的主键值都是自动增长的 但是如果有这样的需求时 插入一条记录后 自动生成了主键 而这个主键需要在其他表中使用时 此时
  • 关联分析算法(一)——Apriori(先验算法)

    算法思路简介 Apriori根据原始的销售表 第一步 列出所有元素 所有元素独立组成一个集合 计算每个集合的支持度 然后根据最小支持度的阈值剔除掉小的支持度的集合 第二步 每个集合都增加一个与原有集合中没有的元素 构成多个新的集合 计算每个
  • ARM 汇编基础知识

    1 为什么学习汇编 我们在进行嵌入式 Linux 开发的时候是绝对要掌握基本的 ARM 汇编 因为 Cortex A 芯片一 上电 SP 指针还没初始化 C 环境还没准备好 所以肯定不能运行 C 代码 必须先用汇编语言设置好 C 环境 比如
  • 容联云通讯完成发送验证码

    容联云通讯完成发送验证码 不是广告 真人编写 学习记录分享而已 容联云通讯官方网站 https www yuntongxun com 进入网站后 找到测试号码 绑定测试的手机号 最多绑定是三个 第二部 查找相关语言demo 以及SDK 点击
  • 后渗透系列之windows文件下载

    后渗透系列之windows文件下载 不知道你们在进行渗透时会不会遇到这样的问题 在进行后渗透时linux系统是可以使用wget命令进行文件下载的 在真实的渗透环境下往往拿到的都只是windows系统的一个命令行 那windows系统怎么做到
  • CentOS 7.5 离线安装 Nginx 1.18

    CentOS 7 5 离线安装 Nginx 1 18 整体情况介绍 准备阶段 安装步骤 详细步骤 准备 安装 整体情况介绍 操作系统 CentOS 7 5 Nginx版本 nginx 1 18 0 tar gz 说明 1 官网推荐的安装方式
  • opencv 脸部识别开源软件

    转自 http baike baidu com link url La63ZsuqOW1YdyW5UAHQ5zDphzSB58 IcC1SUl2Njit4T0frWPrjflJIuk66RydifpPMBJ50HETrZhr5NrhrU O
  • PyCharm2019.1.1社区版安装(Win10)

    PyCharm2019 1 1安装 Win10 使用Python进行开发时 已经安装好Python 我们可以在终端使用Python 也可以用文本编辑器编写代码后然后用Python执行代码 但这些都不是很方便 也不是很智能和不够友好 需要有多
  • ip 子网数目 网络号 主机号 广播地址 可用IP地址范围

    考试中都会给定一个IP地址和对应的子网掩码 让你计算 1 子网数目 2 网络号 3 主机号 4 广播地址 5 可用IP地址范围 综合实例 已知172 31 128 255 18 试计算 1 子网数目 2 网络号 3 主机号 4 广播地址 5
  • Redis持久化机制:AOF和RDB

    前言 我们都知道Redis操作的数据都来源于内存 所以Redis读写速率极快 那为什么我们还需要用到持久化勒 当我们Redis服务器宕机或者Redis进程被kill或者异常退出的时候 如果没有持久化机制将数据保存到磁盘的化 那么之前保存到R
  • base64编码解码器【C++】

    在线编码解码工具https base64 us 所有结果可以使用上述网站检验 什么是base64编码 base64编码是一种编码方式 用64 1 个字符表示字符 本质是将三位8比特字符扩增为四位8比特字符 但是这么说开始可能很闷逼 给个图
  • postman接口传参案例

    目录 案例1 接口A 接口B 案例2 断言 案例1 接口A 根据返回值需要从返回值中提取userid值 在Tests标签栏下编写脚本 获取返回的响应值 并转化为json格式 var jsonData pm response json 获取返
  • Springboot中管理Spring容器重写工具类进行使用

    说明 SpringUtils 既spring工具类 方便在非spring管理环境中获取bean 在SpringBoot或者SpringMVC框架中 基于Spring进行管理容器以及上下文或者等前置操作等 因此需要实现 BeanFactory