当前位置: 首页 > news >正文

SpringUtils 工具类,方便在非spring管理环境中获取bean

应用场景
1 可用在工具类中,
2 spring【Controller,service】环境中,
3 其中的一个方法getAopProxy可获得代理对象,需要将 @EnableAspectJAutoProxy(exposeProxy = true) 允许获取代理对象

import org.springframework.aop.framework.AopContext;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** spring工具类 方便在非spring管理环境中获取bean** @author ruoyi*/
@Component
public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware {/*** Spring应用上下文环境*/private static ConfigurableListableBeanFactory beanFactory;private static ApplicationContext applicationContext;@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {SpringUtils.beanFactory = beanFactory;}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringUtils.applicationContext = applicationContext;}/*** 获取对象** @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();}/*** 获取当前的环境配置,无配置返回null** @return 当前的环境配置*/public static String[] getActiveProfiles() {return applicationContext.getEnvironment().getActiveProfiles();}/*** 获取配置文件中的值** @param key 配置文件的key* @return 当前的配置文件的值*/public static String getRequiredProperty(String key) {return applicationContext.getEnvironment().getRequiredProperty(key);}
}

http://www.lryc.cn/news/300754.html

相关文章:

  • JavaWeb之请求
  • VsCode中常用的正则表达式操作
  • ubuntu22.04@laptop OpenCV Get Started: 007_color_spaces
  • mysql 查询性能优化关键点总结
  • React - 分页插件默认是英文怎么办
  • 揭开Markdown的秘籍:引用|代码块|超链接
  • 【C语言】Debian安装并编译内核源码
  • 使用 C++23 从零实现 RISC-V 模拟器(6):权限支持
  • 针对某终端安全自检钓鱼工具的分析
  • XSS数据接收平台
  • MySQL 基础知识(六)之数据查询(一)
  • C#使用哈希表对XML文件进行查询
  • vscode写MATLAB配置
  • 第13章 网络 Page734 “I/O对象”的链式传递 单独的火箭发射函数,没有用对的智能指针
  • Git 存储大文件
  • 使用 Mermaid 创建流程图,序列图,甘特图
  • 政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(二){Image tutorial}·{Python语言}
  • gem5学习(20):替换策略——Replacement Policies
  • 嵌入式Qt Qt中的字符串类
  • 函数高级(C++)
  • jmeter-10调试取样器
  • C#,二进制数的按位旋转(Bits Rotate)算法与源代码
  • 解决ubuntu登录密码问题
  • Ubuntu忘记登录密码重置步骤
  • MySQL数据库基础(五):SQL语言讲解
  • python-使用ffmpeg批量修改文件的后缀名
  • 关于jupyter的一些小笔记
  • macOS 安装 conda
  • C++并发编程 -3.同步并发操作
  • 【打工日常】使用docker部署可视化工具docker-ui