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

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

文章目录

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

1. SpringBoot版本

xml 复制代码
 <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配置类如下

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;

    @Override
    public 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();
    }

}
相关推荐
s***46986 分钟前
【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)
java·spring boot·后端
AntBlack12 分钟前
Z-Image 发布了 ,赶紧体验了一把(配套 Modal执行脚本)
前端·后端·aigc
努力的小雨14 分钟前
AI 编程协作,我的一点邪修方法,希望可以帮助到你
后端
码事漫谈27 分钟前
C++网络编程:从Socket混乱到优雅Reactor的蜕变之路
后端
码事漫谈32 分钟前
C++ Lambda表达式:从“这是什么鬼”到“真香!”的完整心路历程
后端
k***12171 小时前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
学历真的很重要1 小时前
LangChain V1.0 Short-term Memory 详细指南
后端·python·语言模型·面试·langchain·agent·ai编程
s***P9821 小时前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis
q***06291 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
w***74172 小时前
spring session、spring security和redis整合的简单使用
redis·spring·bootstrap