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

}
相关推荐
六毛的毛1 小时前
Springboot开发常见注解一览
java·spring boot·后端
AntBlack1 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
31535669131 小时前
一个简单的脚本,让pdf开启夜间模式
前端·后端
uzong1 小时前
curl案例讲解
后端
开开心心就好2 小时前
免费PDF处理软件,支持多种操作
运维·服务器·前端·spring boot·智能手机·pdf·电脑
一只叫煤球的猫2 小时前
真实事故复盘:Redis分布式锁居然失效了?公司十年老程序员踩的坑
java·redis·后端
猴哥源码2 小时前
基于Java+SpringBoot的农事管理系统
java·spring boot
大鸡腿同学3 小时前
身弱武修法:玄之又玄,奇妙之门
后端
光军oi4 小时前
java微服务(Springboot篇)——————IDEA搭建第一个Springboot入门项目
java·spring boot·微服务
轻语呢喃5 小时前
JavaScript :字符串模板——优雅编程的基石
前端·javascript·后端