You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Bean作用域:如何在创建Request作用域Bean时获取请求信息

获取Request作用域Bean创建时的请求信息

针对你的CustomMultipartResolver(Request作用域Bean),每次它被创建时,有几种直接获取当前请求信息的方式:

方法一:通过RequestContextHolder获取

利用Spring提供的RequestContextHolder工具类,可在Bean的初始化方法中直接拿到当前请求对象:

public class CustomMultipartResolver extends CommonsMultipartResolver {

    @PostConstruct
    public void initRequestInfo() {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            HttpServletRequest request = attributes.getRequest();
            // 示例:获取请求路径、方法等信息
            String requestUri = request.getRequestURI();
            String requestMethod = request.getMethod();
            System.out.printf("请求路径:%s,请求方法:%s%n", requestUri, requestMethod);
        }
    }
}

方法二:构造方法注入HttpServletRequest

Request作用域的Bean可直接通过构造方法注入当前的HttpServletRequest实例,Spring会自动绑定当前请求对象:

public class CustomMultipartResolver extends CommonsMultipartResolver {

    private final HttpServletRequest request;

    // 构造方法注入请求对象
    public CustomMultipartResolver(HttpServletRequest request) {
        this.request = request;
        // 在构造方法中即可使用请求信息
        String remoteIp = request.getRemoteAddr();
        System.out.println("请求来源IP:" + remoteIp);
    }
}

你的@Bean定义无需修改,Spring会自动处理注入逻辑。

方法三:实现ServletRequestAware接口

通过实现Spring的ServletRequestAware接口,让Spring主动将当前请求对象注入到Bean中:

public class CustomMultipartResolver extends CommonsMultipartResolver implements ServletRequestAware {

    private HttpServletRequest request;

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
        // 在这里处理请求信息
        String userAgent = request.getHeader("User-Agent");
        System.out.println("客户端UA:" + userAgent);
    }
}

以上三种方法都能在Request作用域Bean创建时,可靠获取到当前请求的上下文信息,你可以根据实际需求选择合适的方式。

内容的提问来源于stack exchange,提问作者Jordi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:23:11