SpringBoot之获取Spring容器上下文组件的工具类封装

SpringBoot之获取Spring容器上下文组件的工具类封装

文章目录

  • SpringBoot之获取Spring容器上下文组件的工具类封装
  • 1. SpringBoot版本
  • 2. Spring容器上下文工具类封装

  1. 如在一个普通类中获取HttpServletRequestHttpServletResponse…等等
  2. 以工具类的形式getBen,而不需要@Component、@Service、@Repository 或使用@Autowired注入Ben等
  3. 在使用的地方以静态方法获取对象即可

1. SpringBoot版本

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.5.RELEASE</version></parent>

2. Spring容器上下文工具类封装

创建一个工具类,如SpringContextUtils,并实现ApplicationContextAware接口

SpringContextUtils.java配置类如下

package com.yuan.utils;import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.ClassUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
yuan
/*** <p>* Description: Spring上下文及核心包中一些公用的核心方法工具类* </p>** @author jinshengyuan* @since 2022/12/17 20:20*/
@Configuration
public class SpringContextUtils implements ApplicationContextAware {/*** 上下文对象实例*/private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringContextUtils.applicationContext = applicationContext;}/*** 获取applicationContext** @return*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 获取HttpServletRequest*/public static HttpServletRequest getHttpServletRequest() {return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();}/*** 获取HttpServletResponse*/public static HttpServletResponse getHttpServletResponse() {return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();}public static String getDomain() {HttpServletRequest request = getHttpServletRequest();StringBuffer url = request.getRequestURL();return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString();}public static String getOrigin() {HttpServletRequest request = getHttpServletRequest();return request.getHeader("Origin");}/*** 通过name获取 Bean.** @param name* @return*/public static Object getBean(String name) {return getApplicationContext().getBean(name);}/*** 通过class获取Bean.** @param clazz* @param <T>* @return*/public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean** @param name* @param clazz* @param <T>* @return*/public static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}/*** 在普通类中获取StringRedisTemplate对象** @return*/public static StringRedisTemplate getStringRedisTemplate() {return (StringRedisTemplate) SpringContextUtils.getBean("stringRedisTemplate");}/*** 在普通类中获取RedisTemplate对象** @return*/public static RedisTemplate getRedisTemplate() {return (RedisTemplate) SpringContextUtils.getBean("redisTemplate");}/*** 在普通类中获取JdbcTemplate对象** @return*/public static JdbcTemplate getJdbcTemplate() {return (JdbcTemplate) SpringContextUtils.getBean("jdbcTemplate");}/*** 获取项目的绝对路径** @return*/public final static String getProjectClasspath() {return ClassUtils.getDefaultClassLoader().getResource("").getPath();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win11环境下使用hane WIN NFS Server搭建nfs服务

如题&#xff0c;服务端使用hane win nfs server&#xff0c;客户端也是使用wins系统。 S1&#xff0c;安装nfs服务器端&#xff0c;wins系列除了server系列可以使用nfs服务端&#xff0c;其余必须使用额外的组件来实现NFS文件系统的功能。 Networking Software for Windows …

系统学习Python——装饰器:直接管理函数和类

分类目录&#xff1a;《系统学习Python》总目录 在《系统学习Python——装饰器》系列文章中&#xff0c;我们的大多数示例都设计来拦截函数和实例创建调用。这对于装饰器来说很典型&#xff0c;但是它们并不限于这一角色。因为装饰器通过装饰器代码来运行新的函数和类&#xff…

Nodejs 第四十六章(redis持久化)

redis持久化 Redis提供两种持久化方式&#xff1a; RDB&#xff08;Redis Database&#xff09;持久化&#xff1a;RDB是一种快照的形式&#xff0c;它会将内存中的数据定期保存到磁盘上。可以通过配置Redis服务器&#xff0c;设置自动触发RDB快照的条件&#xff0c;比如在指…

C#进阶高级语法之LINQ:深入分析LINQ的查询表达式、延迟执行与PLINQ高级特性

LINQ&#xff08;Language-Integrated Query&#xff09;是.NET框架的一个强大的查询语言&#xff0c;它可以用来查询各种数据源&#xff0c;如集合、数据库等。LINQ提供了许多高级特性&#xff0c;包括LINQ查询表达式、deferred execution和PLINQ&#xff08;并行LINQ&#xf…

力扣每日一题 用栈实现队列

Problem: 232. 用栈实现队列 文章目录 思路复杂度&#x1f496; 朴素版&#x1f496; 优化版 思路 &#x1f468;‍&#x1f3eb; 路飞题解 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( …

Linux系统的服务/进程

系统守护进程&#xff08;服务&#xff09; •服务就是运行在网络服务器上监听用户请求的进程 •服务是通过端口号来区分的 常见的服务及其对应的端口 1.ftp&#xff1a;21 FTP指的是文件传输协议&#xff0c;它是用于在计算机网络上进行文件传输的标准网络协议。通过FTP&am…

HTTP协议与HTTPS协议

HTTP协议 HTTP协议是一个无状态的协议&#xff0c; 服务器不维护任何有关客户端之前所发请求的消息。 是一种懒政&#xff0c;有状态协议就会更加复杂&#xff0c;需要维护状态&#xff08;历史信息&#xff09;,要是客户或者服务器失效,会产生状态不一致(状态前后不对称),解决…

【Python 常用脚本及命令系列 2.4 -- int 将字符串数字转为数值】

文章目录 Python int() 函数python 将字符串数字转为数值type 函数使用 Python int() 函数 int() 函数用于将一个字符串或数字转换为整型。 以下是 int() 方法的语法: class int(x, base10)x – 字符串或数字。base – 进制数&#xff0c;默认十进制&#xff0c;如果是16进制…

C++对象内存模型布局详解

目录 本文主要内容如下&#xff1a; 最后还有一些问题&#xff1a; 一、理解虚函数表 二、对象模型概述 三、继承下的C对象模型 单继承&#xff1a; 多继承&#xff1a; 一般的多继承&#xff08;非菱形继承&#xff09;&#xff1a; 菱形继承&#xff1a; 五、虚继承…

【牛客】VL64 时钟切换

描述 题目描述&#xff1a; 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频&#xff0c;现在要设计一个切换电路&#xff0c;sel选择时候进行切换&#xff0c;要求没有毛刺。 信号示意图&#xff1a; 波形示意图&#xff1a; 输入描述&#xff1a; clk0 clk1为时…

第四十七天| 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

Leetcode 198.打家劫舍 题目链接&#xff1a;198 打家劫舍 题干&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚…

12-Linux部署Zookeeper集群

Linux部署Zookeeper集群 简介 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布式同步、组服务等。…

jmeter 压测数据库

当前版本&#xff1a; jmeter 5.6.3mysql 5.7.39 简介 JMeter 是一个开源的 Java 应用程序&#xff0c;主要用于进行性能测试和负载测试。它支持多种协议&#xff0c;包括但不限于 HTTP、HTTPS、FTP、JDBC 以及各种 Web Services。对于数据库的压力测试可以使用 JDBC 协议与数…

excel导入标准化

excel导入较导出还是复杂一些&#xff0c;一般分为三个步骤.市面上低代码平台可以将常用的操作固化&#xff0c;并且形成收益&#xff0c;这也是挺好的。我将我的一些总结分享到网上也是我自己乐意的。毕竟尊重技术的还是搞技术的自身&#xff0c;一般企业老板并不太关心技术代…

Spring中@import注解终极揭秘!

技术概念 它能干啥 Import注解在Spring框架中主要用于解决模块化和配置管理方面的技术问题&#xff0c;它可以帮助开发者实现以下几个目标&#xff1a; 模块化配置&#xff1a;在大型项目中&#xff0c;通常需要将配置信息分散到多个配置类中&#xff0c;以便更好地组织和管…

FPGA-DDS原理及实现

DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。 相位累加器是由N位加法器与N位寄存器构成,每个时钟周期的上升沿,加法器…

数据中心制冷系统设计与发展

数据中心概要与传统建筑空间相比&#xff0c;数据中心散热密度大&#xff0c;单位面积散热量可达传统办公区域的40倍以上&#xff0c;且越来越呈现集中化、大型化的趋势&#xff1b;同时&#xff0c;设备的安全性需求提高了对内部空调温湿度和洁净度的要求&#xff0c;数据中心…

【Qt】Qwidget的常见属性

目录 一、Qwidget核心属性 二、enable属性 三、geometry属性 四、 WindowFrame的影响 五、windowTitle属性 六、windowIcon属性 七、qrc文件管理资源 八、windowOpacity属性 九、cursor属性 十、font属性 十一、toolTip属性 十二、focusPolicy属性 十三、styleShe…

STM32FreeRTOS-事件组1(STM32Cube高效开发教程)

文章目录 一、事件组的原理和功能1、事件组与队列信号量特点2、事件组存储结构3、事件组运行原理 二、事件组部分函数1、xEventGroupCreate()创建事件组函数2、xEventGroupSetBits&#xff08;&#xff09;事件组置位函数3、xEventGroupSetBitsFromISR&#xff08;&#xff09;…

Sychronized和ReentrantLock锁 面试题

Sychronized和ReentrantLock锁 面试题 前言1、Java死锁如何避免&#xff1f;2、公平锁和⾮公平锁的底层实现&#xff1f;3、ReentrantLock中tryLock()和lock()⽅法的区别&#xff1f;4、Sychronized的偏向锁、轻量级锁、重量级锁&#xff1f;5、谈谈你对AQS的理解&#xff0c;A…