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

获取Spring中bean工具类

获取Spring中bean工具类

工具类

package com.geekmice.springbootselfexercise.utils;import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** @author PMB*/
@Component
public class SpringUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if (SpringUtil.applicationContext == null) {SpringUtil.applicationContext = applicationContext;}// System.out.println("---------------------------------------------------------------------");//// System.out.println("---------------------------------------------------------------------");//// System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext=" + SpringUtil.applicationContext + "========");//// System.out.println("---------------------------------------------------------------------");// // 可以查询数据库做一些项目启动的初始化// // IDataService iDataService = getBean(IDataService.class);// // 可以初始化启动一些定时任务// // QuartzManager.addJob();// // 可以初始化设置一些SpEL参数// System.setProperty("TopicArray", "dataTopic,weatherTopic");}/*** 获取applicationContext,应用上下文** @return*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 通过name获取 Bean.** @param name bean名称* @return bean*/public static Object getBean(String name) {return getApplicationContext().getBean(name);}/*** 通过class获取Bean*/public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean** @param name bean名称* @param clazz class对象* @param <T> 指定泛型* @return*/public static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}}

测试类

@RestController(value = “easySqlInjector”)
@RequestMapping(value = “bean”)
@Api(tags = “3.获取bean操作”)
@Slf4j
public class BeanController {

@Bean(name = “easySqlInjector”)
public EasySqlInjector easySqlInjector(){
return new EasySqlInjector();
}

package com.geekmice.springbootselfexercise.controller;import com.geekmice.springbootselfexercise.injector.EasySqlInjector;
import com.geekmice.springbootselfexercise.utils.AjaxResult;
import com.geekmice.springbootselfexercise.utils.SpringUtil;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @BelongsProject: spring-boot-self-exercise* @BelongsPackage: com.geekmice.springbootselfexercise.controller* @Author: pingmingbo* @CreateTime: 2023-08-09  21:52* @Description: bean操作* @Version: 1.0*/
@RestController(value = "easySqlInjector")
@RequestMapping(value = "bean")
@Api(tags = "3.获取bean操作")
@Slf4j
public class BeanController {@GetMapping(value = "getBean")public AjaxResult getBean() {// 根据class获取beanEasySqlInjector bean = SpringUtil.getBean(EasySqlInjector.class);// 根据name获取beanEasySqlInjector easySqlInjector = (EasySqlInjector)SpringUtil.getBean("easySqlInjector");// 根据name和class获取beanEasySqlInjector easySqlInjectorSecond = SpringUtil.getBean("easySqlInjector", EasySqlInjector.class);log.info("easySqlInjectorSecond : [{}]" , easySqlInjectorSecond);log.info("easySqlInjector : [{}]", easySqlInjector);log.info("bean : [{}]", bean);return AjaxResult.success();}
}

在这里插入图片描述

2023-08-09 22:04:20.211 INFO 25656 — [nio-8081-exec-1] c.g.s.controller.BeanController : easySqlInjectorSecond : [com.geekmice.springbootselfexercise.injector.EasySqlInjector@935fe38]
2023-08-09 22:04:20.211 INFO 25656 — [nio-8081-exec-1] c.g.s.controller.BeanController : easySqlInjector : [com.geekmice.springbootselfexercise.injector.EasySqlInjector@935fe38]
2023-08-09 22:04:20.212 INFO 25656 — [nio-8081-exec-1] c.g.s.controller.BeanController : bean : [com.geekmice.springbootselfexercise.injector.EasySqlInjector@935fe38]

相关文章:

获取Spring中bean工具类

获取Spring中bean工具类 工具类 package com.geekmice.springbootselfexercise.utils;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org…...

【实战篇】亿级高并发电商项目(新建 ego_pojo、ego_mapper、ego_api、ego_provider、搭建后台项目 )十五

目录 八、 搭建 Provide 1 新建 ego_pojo 2 新建 ego_mapper 2.1编写 pom.xml 2.2新建配置文件 ​编辑...

【Plex】FRP内网穿透后 App无法使用问题

能搜索到这个文章的&#xff0c;应该都看过这位同学的分析【Plex】FRP内网穿透后 App无法使用问题_plex frp无效_Fu1co的博客-CSDN博客 这个是必要的过程&#xff0c;但是设置之后仍然app端无法访问&#xff0c;原因是因为网络端口的问题 这个里面的这个公开端口&#xff0c;可…...

[管理与领导-11]:IT基层管理者 - 目标与落实 - 过程管理失控,结果总难达成的问题思考:如何把过程管控做得更好?

目录 前言&#xff1a; 第1章 问题与现象 1.1 总有意想不到的事发生&#xff1a;意外事件 1.2 总有计划变更&#xff1a;意外影响 1.3 总有一错再错&#xff0c;没有复盘、总结与反思&#xff0c;没有流程与改进 第2章 背后的原因 2.1 缺乏及时的过程检查 - 缺乏异常检测…...

用php语言写一个chatgpt3.5模型的例子

当然可以&#xff01;使用PHP语言调用OpenAI API与ChatGPT-3.5模型进行交互。首先&#xff0c;确保你已经安装了PHP 7.2或更新版本&#xff0c;并具备可用的OpenAI API密钥。 下面是一个基本的PHP示例&#xff0c;展示了如何使用OpenAI API与ChatGPT-3.5模型进行对话&#xff…...

PHP实现保质期计算器

1.php实现保质期计算&#xff0c; 保质期日期可选&#xff0c;天 、月、年 2. laravel示例 /*** 保质期计算器* return void*/public function expirationDateCal(){$produce_date $this->request(produce_date); // 生产日期$warranty_date $this->reques…...

【独立版】新零售社区团购电商系统生鲜水果商城兴盛优选十荟团源码

【独立版】新零售社区团购电商系统生鲜水果商城兴盛优选十荟团源码...

C++系列十:其他-1. Lua

系列文章目录 Lua 系列文章目录前言Lua介绍&#xff1a;参考链接&#xff1a; 基本语法&#xff1a;函数、迭代器table、userdata、模块元素、元方法&#xff1a;协程、文件读写面向对象、垃圾回收 前言 我写这个博客的一个问题&#xff1f;(●’◡’●) 居然是 取名太难了。 …...

不知道打仗之害,就不知道打仗之利

不知道打仗之害&#xff0c;就不知道打仗之利 【安志强趣讲《孙子兵法》第7讲】 【原文】 夫钝兵挫锐&#xff0c;屈力殚货&#xff0c;则诸侯乘其弊而起&#xff0c;虽有智者&#xff0c;不能善其后矣。 【注释】 屈力殚货&#xff1a;屈力&#xff0c;指力量消耗&#xff0c;…...

【leetcode】242. 有效的字母异位词(easy)

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 思路&#xff1a; 先比较两字符串长度是否相同&#xff0c;如果不同直接返回false。创建…...

Windows电脑快速搭建FTP服务教程

FTP介绍 FTP&#xff08;File Transfer Protocol&#xff09;是一种用于在计算机网络上进行文件传输的标准协议。它提供了一种可靠的、基于客户端-服务器模型的方式来将文件从一个主机传输到另一个主机。在本文中&#xff0c;我将详细介绍FTP的工作原理、数据传输模式以及常见…...

Arduino驱动MQ2模拟烟雾传感器(气体传感器篇)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 MQ2气体传感器,可以很灵敏的检测到空气中的烟雾、液化气、丁烷、丙烷、甲烷、酒精、氢气等气体,与Arduino结合使用,可以制作火灾烟雾报警、液化气、丁烷、丙烷、甲烷、酒精、氢气气体泄露报警等相…...

常见分布式ID解决方案总结:数据库、算法、开源组件

常见分布式ID解决方案总结 分布式ID分布式ID方案之数据库数据库主键自增数据库号段模式Redis自增MongoDB 分布式ID方案之算法UUIDSnowflake(雪花算法) 雪花算法的使用IdWorker工具类配置分布式ID生成器 分布式ID方案之开源组件uid- generator(百度)Tinyid&#xff08;滴滴&…...

记录--Loading 用户体验 - 加载时避免闪烁

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在切换详情页中有这么一个场景&#xff0c;点击上一条&#xff0c;会显示上一条的详情页&#xff0c;同理&#xff0c;点击下一条&#xff0c;会显示下一条的详情页。 伪代码如下所示&#xff1a; 我们…...

系统架构设计专业技能 · 软件工程之软件测试与维护(六)【系统架构设计师】

系列文章目录 系统架构设计专业技能 网络规划与设计&#xff08;三&#xff09;【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师…...

基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................... %fine regular gr…...

柏睿向量数据库Rapids VectorDB赋能企业级大模型构建及智能应用

ChatGPT的问世,在为沉寂已久的人工智能重新注入活力的同时,也把长期默默无闻的向量数据库推上舞台。今年4月以来,全球已有4家知名向量数据库公司先后获得融资,更加印证了向量数据库在AI大模型时代的价值。 什么是向量数据库? 在认识向量数据库前,先来了解一下最常见的关…...

装备合成(牛客)

登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 牛牛有x件材料a和y件材料b&#xff0c;用2件材料a和3件材料b可以合成一件装备&#xff0c;用4件材料a和1件材料b也可以合成一件装备。牛牛想要最大化合成的装备的数量&#xff0c;于是牛牛找来了你帮忙。 分析&#xff…...

C语言学习之一级指针二级指针

一级指针&#xff1a;内存中每个字节都有一个编号&#xff0c;这个编号就是指针&#xff0c;也称作地址&#xff1b;专门用来存储地址的变量&#xff0c;就是指针变量&#xff1b;定义一级指针变量并初始化&#xff1a; 数据类型 *指针变量名 &普通变量名; 数据类型 *指针…...

【腾讯云 Cloud Studio 实战训练营】使用 Cloud Studio 快速构建 Vue + Vite 完成律师 H5 页面

【腾讯云 Cloud Studio 实战训练营】使用 Cloud Studio 快速构建 Vue Vite 完成律师 H5 页面 前言一、基本介绍1.应用场景2.产品优势 二、准备工作1.注册 Cloud Studio2.进入 Vue 预置开发环境 三、使用 Cloud Studio 快速构建 Vue Vite 完成律师 H5 页面1.安装相关依赖包2.主…...

【王炸组合】Hermes Agent 官方 UI 发布:本地白嫖 Google Gemma 4,零成本打造最强微信 AI 助手

前言如果说 2025 年是 AI 大模型的爆发年&#xff0c;那么 2026 年 4 月就是“个人 AI 智能体”的普及元年。随着 Gemma 4&#xff08;Google 4月2日刚刚发布&#xff0c;31B 性能直逼 GPT-4o&#xff09;的开源&#xff0c;以及 Hermes Agent 终于告别了繁琐的命令行、发布了正…...

CSS如何解决Less与CSS兼容性问题_通过配置文件实现平滑过渡与混合开发

Less编译后CSS类名冲突根源是原始CSS与Less生成CSS共存且类名重复&#xff0c;应统一导入Less文件或关闭css-modules&#xff1b;变量无法在纯CSS中使用&#xff0c;需借助PostCSS插件桥接。Less编译后CSS类名冲突怎么办直接改less-loader配置加modifyVars或javascriptEnabled没…...

JumpServer自动化运维避坑手册:Ansible作业调度那些容易踩的5个雷(含容器权限隔离最佳实践)

JumpServer自动化运维深度指南&#xff1a;Ansible作业调度实战避坑与容器权限隔离 开篇&#xff1a;当自动化运维遇上权限边界 凌晨三点&#xff0c;运维团队的告警铃声突然响起——某业务线的生产环境批量执行了未经授权的系统更新。调查发现&#xff0c;问题源于JumpServer中…...

解决Navicat正向工程从模型建表报错怎么办_外键关联与语法解析

Navicat正向工程ERROR 1005八成因外键约束底层校验失败&#xff0c;需查errno 150/121、确认被引用字段有完整索引且类型/字符集/NOT NULL严格一致&#xff0c;并勾选“内联生成外键”选项。Navicat 正向工程报错 ERROR 1005: Cant create table 怎么定位这错误八成不是建表语句…...

AGI游戏智能落地失败率高达67%?SITS2026专家团复盘11个真实项目,提炼出2个关键决策阈值与1个不可逆拐点

第一章&#xff1a;SITS2026分享&#xff1a;AGI与游戏智能 2026奇点智能技术大会(https://ml-summit.org) AGI在游戏环境中的验证价值 通用人工智能&#xff08;AGI&#xff09;并非仅面向抽象推理任务&#xff0c;游戏世界正成为其核心验证场域。开放世界RPG、实时策略与多…...

AGI与机器人结合不是“加法”,而是“范式熔断”——SITS2026提出全新评估矩阵(含6维动态权重算法)

第一章&#xff1a;AGI与机器人结合不是“加法”&#xff0c;而是“范式熔断” 2026奇点智能技术大会(https://ml-summit.org) 当通用人工智能&#xff08;AGI&#xff09;不再仅运行于云端沙盒或语言模型API中&#xff0c;而是实时驱动机械臂完成非结构化厨房操作、自主重规…...

从数据清洗到模型部署:一个完整VGG16乳腺超声分类项目的避坑指南与优化思考

从数据清洗到模型部署&#xff1a;VGG16乳腺超声分类全流程实战精要 医学影像分析正经历着从传统人工判读到AI辅助诊断的范式转移。当我们聚焦于乳腺癌筛查这一关键领域时&#xff0c;超声图像分类任务因其非侵入性和普及性优势&#xff0c;成为计算机视觉技术落地医疗的重要突…...

AGI不再依赖云巨头?深度拆解Polkadot+LLM+Verifiable Computation三栈融合架构(含GitHub Star 3.2K实证项目)

第一章&#xff1a;AGI的分布式与去中心化探索 2026奇点智能技术大会(https://ml-summit.org) 传统AGI研发范式高度依赖中心化算力集群、统一模型权重分发与集中式数据治理&#xff0c;而分布式与去中心化架构正催生新一代AGI演进路径&#xff1a;节点自治、共识驱动、价值可验…...

用 AR 眼镜重构生活记忆:我做了一个「空间记忆管家」智能体

用 AR 眼镜重构生活记忆&#xff1a;我做了一个「空间记忆管家」智能体 很多瞬间其实并不盛大&#xff0c;却会在未来某个时刻突然变得珍贵。比如家里一次普通的生日聚会&#xff0c;朋友坐在沙发上聊天时的笑声&#xff0c;傍晚海边一段安静的散步&#xff0c;或者旅行途中抬头…...

深度剖析:导致AI项目失败的五大核心因素与系统化解决方案

AI项目失败率高企,根源往往不在算法,而在系统性的工程、组织与价值错配。本文将深度剖析五大核心因素,并提供可落地的解决方案。同时,结合CAIE注册人工智能工程师认证的能力框架,说明系统化学习如何帮助从业者规避这些陷阱。 一、价值错配:解决了一个“完美”的非问题 现…...