当前位置: 首页 > 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);}
}

相关文章:

  • Ubuntu Desktop 开机数字小键盘
  • ChatGPT高效提问—prompt常见用法(续篇九)
  • 讲解用Python处理Excel表格
  • ctfshow-文件上传(web151-web161)
  • 【双指针】:Leetcode611.有效三角形的个数
  • mysql 执行update操作 记录未修改
  • 【Linux系统化学习】文件重定向
  • 每日一题 力扣107 二叉树的层序遍历Ⅱ
  • 使用Autodl云服务器或其他远程机实现在本地部署知识图谱数据库Neo4j
  • WebStorm | 如何修改webstorm中新建html文件默认生成模板中title的初始值
  • 飞天使-k8s知识点20-kubernetes实操5-pod更新与暂停-statefulset
  • 精通C语言:打造高效便捷的通讯录管理系统
  • (06)Hive——正则表达式
  • Rust变量与常量介绍
  • 第六章、代理模式
  • 《剑指offer》分解让复杂问题更简单
  • Centos6.8 使用rpm安装mysql5.7
  • Github访问慢解决办法
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JS函数式编程 数组部分风格 ES6版
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • PHP那些事儿
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Rancher如何对接Ceph-RBD块存储
  • ViewService——一种保证客户端与服务端同步的方法
  • Webpack 4 学习01(基础配置)
  • Zepto.js源码学习之二
  • 对JS继承的一点思考
  • 基于web的全景—— Pannellum小试
  • 精彩代码 vue.js
  • 聊聊sentinel的DegradeSlot
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 为视图添加丝滑的水波纹
  • 译自由幺半群
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • hi-nginx-1.3.4编译安装
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ( 10 )MySQL中的外键
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (ros//EnvironmentVariables)ros环境变量
  • (十五)使用Nexus创建Maven私服
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)jdk与jre的区别
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET 命令行参数包含应用程序路径吗?
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .Net小白的大学四年,内含面经