2012-01-16 78 views
3

我有一個請求scoped bean,我需要訪問HttpServletResponse和HttpServletRequest對象。我如何在Spring 3.1中構造自動裝載HttpServletResponse?

我需要在構造函數中訪問這些對象,所以屬性自動裝配不是一個選項。

我做了以下內容:

@Component 
@Scope("request") 
public class MyClass{ 

    @Autowired(required=true) 
    public MyClass(HttpServletRequest request, HttpServletResponse response) { 

     // do stuff I need to do in the constructor 

    } 
} 

這給了我下面的錯誤:

No default constructor found; nested exception is java.lang.NoSuchMethodException: com.foo.bar.MyClass.()

根據此錯誤信息,它正在尋找paramless默認的構造函數,它不存在。我自動裝配構造函數,並將「required」設置爲true,所以注入器應該選擇這個構造函數。由於這個bean是請求範圍,所以它應該可以工作,但事實並非如此。

任何想法?

回答

3

據我所知,您將無法使用標準方法自動調用HttpServletResponse對象。檢查WebApplicationContextUtils類的registerWebApplicationScopes方法。可解析的依賴關係只有HttpSession.class和HttpSession.class。

檢查cusom解決方案here

+0

謝謝。自定義解決方案看起來有點冒失,所以我重寫了我的邏輯,把bean函數放到HandlerInterceptor中,默認情況下這兩個對象可用。 – GeorgeStone 2012-01-17 23:21:41

+0

如果我在做一個portlet,PortletRequest可用於自動裝配? – rascio 2012-01-31 16:02:50

3

正如@Aravind提到的,HttpServletResponse不作爲自動導線候選。但是,您可以使用ServletWebRequest.getResponse()ServletWebRequesta Spring-specific class作爲自動導向候選項。

話雖如此,它可能無法在構造函數中,但無論如何給它一個:)

+1

剛試過這個。當你自動裝載'ServletWebRequest'時,'WebApplicationContextUtils.WebRequestObjectFactory.getObject()'構造它,不幸的是不會設置響應對象。 – yclian 2012-03-10 17:56:03

相關問題