簡體   English   中英

Spring 引導請求范圍 Bean

[英]Spring Boot Request Scoped Bean

我正在使用 spring 引導來創建微服務。 我需要實現請求 scope bean,因為我在 header 中獲得了一些信息,並且需要在該特定請求的所有類中都可以使用它。 下面是我所做的,但我得到 null 指針錯誤。

@Component
@RequestScope(proxyMode = ScopedProxyMode.TARGET_CLASS)
public Class RequestHeaderInfo {
   private String appInfo;
   ...
}

@Component
public class RequestFilter implements Filter {
    @Autowired
    private RequestHeaderInfo requestHeaderInfo;
  
    public void doFilter(ServletRequest req,....) {
        HTTPServletRequest request = (HTTPServletRequest) req;
        requestHeaderInfo.setAppInfo(request.getHeader("appInfo"))   //throws null pointer error here
        ....
    }
}  

@Contoller
public class RestController {

    @Autowired
    private RequestHeaderInfo requestHeaderInfo;
}

我希望此請求 header info object 在整個特定請求中可用。 在我的過濾器 class 中,它會引發 null 指針錯誤。 我是否在正確的軌道上實施請求范圍的 bean?

在我們的項目(Spring boot 多模塊而不是微服務)中,我們使用攔截器 class 來過濾請求。

@Component
public class RequestInterceptor implements org.springframework.web.servlet.HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

        String appInfo = request.getHeader("appInfo");
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    }
}

加上我們請求 scope 的 Bean 配置如下

@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
@Component
public class RequestBean {

}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM